Python for-in Loop常见遍历方法

Python011

Python for-in Loop常见遍历方法,第1张

Python的for...in 循环有三种常见用法:

第一,按长度遍历

若不需要索引号index,可以直接用"for obj in obj-list"语句遍历

第二,若既需要索引,又需要成员值,可以用enumerate()函数

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串),同时输出数据和数据下标,常用于for-in循环。

第三,不关心索引,只希望同时遍历多个列表,可以用zip函数。

zip函数将多个列表作为输入,在每次迭代的时候,将每个列表的当前成员组合成一个元组输出。

有时我们有列出目录下都有哪些文件和子目录的需求,这种情况是有现成命令可用的,比如windows下的dir命令,linux下的ls命令都可以,那我们用python代码怎么实现呢?

我们利用python丰富的库很容易就能实现一个简易版本,下面我们就用4种方法来实现它。

一、使用os.popen

os.popen工作原理是新建一个子进程,然后用这个子进程执行命令,父进程与子进程间通过管道进行通信。

根据调用popen时的传参,我们可以通过管道读取子进程的输出也可以向子进程写数据,默认是读取子进程的输出。

从以上描述可以看出popen是非常通用的,不是只能用于我们这个例子哦。

那我们开始用它实现我们的需求吧,代码如下:

哈哈,是不是很简单,这种方式虽然能达到目的但其实并不是我们想要的,我们本来就是要实现ls的,结果调用了ls,所以严格意义上来说我们并没有实现ls,那让我们继续往下看其它方法吧,嘿嘿。

二、使用glob.glob

glob可以根据你使用的通配符对文件进行匹配,利用这个特性我们可以列出当前目录下都有哪些文件和子目录,如下代码:

三、使用os.listdir

os.listdir同样可以列出某个目录下都有哪些文件和子目录,如下代码:

四、使用os.walk

os.walk在遍历目录方面非常强大,它不但可以遍历你需要的目录,也可以递归遍历子目录且递归的深度可以用代码控制,下面让我们分别看下怎么遍历整个目录树以及怎么控制深度吧。

os.walk默认是遍历整个目录树的,如下代码就会递归打印出当前目录下所有文件:

那我们怎么控制遍历的深度,比如只遍历n层呢?其实很简单,只需要定义一个深度变量,然后到达n后跳出循环即可,如下代码就只遍历1层:

至此我们已经写完4种方法了,如果你还有其他方法,欢迎评论交流。

一、什么是深度优先遍历

深度优先遍历算法是经典的图论算法。从某个节点v出发开始进行搜索。不断搜索直到该节点所有的边都被遍历完,当节点v所有的边都被遍历完以后,深度优先遍历算法则需要回溯到v以前驱节点来继续搜索这个节点。

注意:深度优先遍历问题一定要按照规则尝试所有的可能才行。

二、二叉树

2.二叉树类型

二叉树类型:空二叉树、满二叉树、完全二叉树、完美二叉树、平衡二叉树。

空二叉树:有零个节点

完美二叉树:每一层节点都是满的二叉树(如1中举例的图)

满二叉树:每一个节点都有零个或者两个子节点

完全二叉树:出最后一层外,每一层节点都是满的,并且最后一层节点全部从左排列

平衡二叉树:每个节点的两个子树的深度相差不超过1.

注:国内对完美二叉树和满二叉树定义相同

3.二叉树相关术语

术语 解释

度 节点的度为节点的子树个数

叶子节点度为零的节点

分支节点度不为零的节点

孩子节点节点下的两个子节点

双亲节点节点上一层的源节点

兄弟节点拥有同一双亲节点的节点

根 二叉树的源头节点

深度 二叉树中节点的层的数量

DLR(先序):

LDR(中序):

LRD(后序):

注意:L代表左子树R代表右子树;D代表根

6.深度优先遍历和广度优先遍历

深度优先遍历:前序、中序和后序都是深度优先遍历

从根节点出发直奔最远节点,

广度优先遍历:首先访问举例根节点最近的节点,按层次递进,以广度优先遍历上图的顺序为:1-2-3-4-5-6-7

三、面试题+励志

企鹅运维面试题:

1.二叉树遍历顺序:看上文

2.用你熟悉的语言说说怎么创建二叉树? python看上文