Python3 迭代和解析(一)

迭代器

在python中,实际保存的序列,以及能够在迭代工具中(如for循环)一次返回一个结果的对象,就看做是可迭代的。

在python3中,可迭代的对象都可以使用__next__()方法,每使用一次返回一个结果。

1
2
3
4
5
6
L = [1,2,3]
I = iter(L) #列表不是自身的迭代器,所以需要调用iter来启动迭代
I.__next__() #返回1
I.__next__() #返回2
I.__next__() #返回3
I.__next__() #返回StopIteration

正如前面例子中所说的,有些可迭代的对象不是自身的迭代器,所以要用iter()来创建。不是自身的迭代器,可以支持多次打开迭代器。

1
2
3
4
5
6
7
L = [1,2,3]
I1 = iter(L) #列表不是自身的迭代器,所以需要调用iter来启动迭代
I2 = iter(L)
I1.__next__() #返回1
I1.__next__() #返回2
I1.__next__() #返回3
I2.__next__() #返回1

内置类型迭代器

除了列表这样的序列外,还有文件、字典等。

1
2
3
4
5
6
7
8
9
10
11
12
f = open('file.txt')
for line in f:
	doSomeThing
 
 
D = {'a':1,'b':2,'c':3}
#可以对字典的键迭代
for key in D.keys():
	doSomeThing
#字典本身也有一个迭代器,可直接返回键
for key in D:
	doSomeThing

常用迭代环境

支持迭代协议的除了for循环外,还有如range()、zip()、map()、filter()、sorted()、sum()、max()、min()、any()、all()等内置函数。

1
2
3
4
5
6
7
8
9
10
11
12
list(range(5))  #0,1,2,3,4
 
list(zip([1,2],[3,4]))  #[(1,3),(2,4)]
 
L = [1,2,3,4,5]
sum(L) #返回15
max(L) #返回5
min(L) #返回1
 
S = ['a','','c']
any(S)  #判断是否有非空元素,返回True
all(S)  #判断是否全为非空元素,返回False

列表解析

列表解析以简单的形式实现强大的功能,虽然可以用for循环等其他形式实现,但一般列表解析的速度会更快一些。

列表解析形式如,[表达式 for 语句],以方括号包裹起来,一个作为列表元素值的表达式,后面是一个类似for循环的形式。

列表解析功能强大,甚至还可以执行嵌套循环或者if语句。

Add a Comment

电子邮件地址不会被公开。 必填项已用*标注