在python中有许多有用的序列函数,学习python就应当熟悉并且择机使用。
1、enumerate
我们经常需要在遍历一个序列的同时追踪当前元素的索引,由于这种场景很常见,所以python内建了enumerate函数,返回了(i,value)元组的序列,其中value是元素的值,i是元素的索引,当你需要对数据建立索引时,一种有效的模式就是使用enumerate构建一个字典,将序列值(假设是唯一的)映射到索引位置上:
list = ['foo','bar','baz']
mapping = {}
for i ,v in enumerate(list):
mapping[v] = i
mapping
{'foo': 0, 'bar': 1, 'baz': 2}
2、sorted
sorted函数返回一个根据任意序列中的元素新建的已排序列表:
sorted([7,1,2,6,0,3,2])
[0, 1, 2, 2, 3, 6, 7]
sorted('python')
['h', 'n', 'o', 'p', 't', 'y']
sorted函数接受的参数与列表的sort方法一致。
3、zip
zip将列表、元组或其他序列的元素配对,新建一个元组构成的列表:
seq1 = ['foo','bar','bae']
seq2 = ['A','B','C']
zipped = zip(seq1,seq2)
list(zipped)
[('foo', 'A'), ('bar', 'B'), ('bae', 'C')]
如果第一个列表中的元素类型和第二个列表中的元素类型最好相同。如果第一个列表中是字符串,而第一个列表中是数值,则会出现报错。
zip可以处理任意长度的序列,它生成列表长度由最短的序列决定;
而zip的常用场景为同时遍历多个序列,有时候甚至会和enumerate同时使用:
for i,(a,b)in enumerate(zip(seq1,seq2)):
print('{0}:{1},{2}'.format(i,a,b))
0:foo,A
1:bar,B
2:baz,C
给定一个已“配对”的序列时,zip函数有一种机智的方式去“拆分”序列。这种方式的另一种思路就是将行的列表转换为列的列表:
list = [('Nolan','Ryan'),('Roger','Clemens'),('Schilling','Curt')]
first_name,last_name = zip(*list)
first_name
('Nolan', 'Roger', 'Schilling')
last_name
('Ryan', 'Clemens', 'Curt')
4、reversed
reversed函数将序列的元素倒序排列:
list(reversed(range(10)))
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
请牢记,reversed是一个生成器,因此如果没有使用list函数或进行for循环的时候,它并不会产生一个倒序的列表。