并行迭代(zip):
zip:拉链
同时迭代两个序列,可使用内置函数zip()
>>> aa = ['a','b','c','d']
>>> bb = [1,2,3,4]
>>> for a,b in zip(aa,bb):
... print(a,b)
...
a 1
b 2
c 3
d 4
zip也可以缝合元素数不同的两个序列,取较短的序列元素数
>>> list(zip(range(5), range(10)))
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]
当然,zip也不局限于两个序列,可以多个序列并行迭代
>>> list(zip(range(5), range(7), range(6)))
[(0, 0, 0), (1, 1, 1), (2, 2, 2), (3, 3, 3), (4, 4, 4)]
迭代获取索引(enumerate):
enumerate:枚举
获取迭代对象同时获取索引:
>>> lst = list("hello")
>>> for i, s in enumerate(lst):
... if s == 'l':
... print(i,s)
...
2 l
3 l
简单推导:
类似for循环,后面也可以跟if条件:
>>> [ pow(x,2) for x in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> [pow(x,2) for x in range(10) if x%3 == 0] # 可被3整除的数的平方
[0, 9, 36, 81]
可以用多个for部分,及x符合条件的每一个与y符合条件的每一个,做笛卡尔积
>>> ['{},{}'.format(x,y) for x in range(5) for y in range(10) if y%3 == 0]
['0,0', '0,3', '0,6', '0,9', '1,0', '1,3', '1,6', '1,9', '2,0', '2,3', '2,6', '2,9', '3,0', '3,3', '3,6', '3,9', '4,0', '4,3', '4,6', '4,9']
简单推导用于构建字典的实例:
>>> squares = {i : '{} squared is {}'.format(i, i**2) for i in range(5)}
>>> squares
{0: '0 squared is 0', 1: '1 squared is 1', 2: '2 squared is 4', 3: '3 squared is 9', 4: '4 squared is 16'}
>>> squares[2]
'2 squared is 4'