python内建序列函数——enumerate, sorted, zip, reversed

来源《利用python进行数据分析》P61-64

enumerate

我们经常需要在遍历一个序列的同时,追踪当前元素的索引。python内建函数enumerate,返回了(i, value)元组的序列,其中value是元素的值,i是元素的索引

for i, value in enumerate(collection):
    pass
    

sorted

sorted函数返回一个根据任意序列中的元素新建的已排序列表,它的参数与列表的sort方法一致

sorted([7, 1, 2, 6, 0, 3, 2])
# [0, 1, 2, 2, 3, 6, 7]
sorted('horse race')
# ['', 'a', 'c', 'e', 'e', 'h', 'o', 'r', 'r', 's']

zip

zip将列表、元组或其他序列的元素配对,新建一个元组构成的列表

seq1 = ['foo', 'bar', 'baz']
seq2 = ['one', 'two', 'three']
zipped = zip(seq1, seq2)
list(zipped)
# [('foo', 'one'), ('bar', 'two'), ('baz', 'three')]

zip可以处理任意长度的序列,它生产列表的长度由最短的序列决定

seq3 = [False, True]
list(zip(seq1, seq2, seq3))
# [('foo', 'one', False), ('bar', 'two', True)]

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

给定一个已配对的序列时,zip函数有一种机智的方式去“拆分”序列,这种方式的另一种思路就是将行的列表转换为列的列表,语法看上去略显魔幻

pitchers = [('Nolan', 'Ryan'), ('Roger', 'Clemens'), ('Schilling', 'Curt')]
first_names, last_names = zip(*pitchers)
# first_names=('Nolan', 'Roger', 'Schilling')
# last_names=('Ryan', 'Clemens', 'Curt')

reversed

reversed函数可以将序列的元素倒序排列
reversed是一个生成器,因此如果没有实例化(例如使用list函数或进行for循环)的时候,它并不会产生一个倒序的列表。

list(reversed(range(10)))
# [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

你可能感兴趣的:(列表,python,数据结构,数据分析)