1.enumerate
我们经常需要在遍历一个序列的同时追踪当前元素的索引。
>> some_list = ['foo','bar','baz']
>> for i,v in enumerate(some_list):
print(i,v)
0 foo
1 bar
2 baz
mapping = {}
for i,v in enumerate(some_list):
mapping[i] = v
print(mapping)
{0: 'foo', 1: 'bar', 2: 'baz'}
2. zip
1.zip是将列表、元祖或者其他序列的元素配对,
新建一个元祖构成的列表
>> seq1 = ['foo','bar','baz']
>> seq2 = ['one','two','three']
>> zipped = zip(seq1,seq2)
>> print(zipped)
<zip at 0xad10c48>
>> list(zipped)
[ ('foo', 'one'),
('bar', 'two'),
('baz', 'three') ]
2.zip可以处理任意长度的序列
它生成列表长度由最短的序列决定
>> seq3 = [False,True]
>> list(zip(seq1,seq2,seq3))
[ ('foo', 'one', False),
('bar', 'two', True) ]
3.zip的常用场景为同时遍历多个序列
有时候会和enumerate同时使用
for i,(a,b) in enumerate(zip(seq1,seq2)):
print('{0}:{1},{2}'.format(i,a,b))
0: foo,one
1: bar,two
2: baz,three
4.给定一个已配对的序列时,zip函数可以拆分
>> pit = [('a','x'),('b','y'),('c','z')]
>> first,last = zip(*pit)
>> first
('a', 'b', 'c')
>> last
('x', 'y', 'z')
3. reversed.是一个生成器,后续讨论,如果没有实例化(list或者for循环)的时候,它并不会产生一个倒序的序列
1.reversed函数将序列的元素倒序排序
>> reversed(range(10))
<range_iterator at 0xb09ee70>
>> for i in reversed(range(10)):
print(i)
9
8
7
6
5
4
3
2
1
0
>> list(reversed(range(10)))
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]