对于两个,或多个具有相同个数的列表,我们想要同步,对应地获取其中的元素,可以用到 zip 函数。
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
list3 = ['x', 'y', 'z']
for item1, item2 in zip(list1, list2):
print(item1, item2)
1 a
2 b
3 c
如果是三个列表进行同步呢,也可以:
for item1, item2, item3 in zip(list1, list2, list3):
print(item1, item2, item3)
1 a x
2 b y
3 c z
其实也不用在 for 循环里就进行赋值,因为迭代的结果是一个元组,可以取出来以后在循环里复制。
for result in zip(list1, list2, list3):
print(result)
(1, 'a', 'x')
(2, 'b', 'y')
(3, 'c', 'z')
列表长短不一致
以上是列表的长度都是一致的,进行迭代的序列长度不一致,那么到了短的序列末尾就会停止迭代,示例如下:
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c', 'd']
for item1, item2 in zip(list1, list2):
print(item1, item2)
1 a
2 b
3 c
可以看到之后的元素就没有再进行迭代了。
如果想要取出长的序列之后的元素,可以使用 itertools_longest()
from itertools import zip_longest
for item1, item2 in zip_longest(list1, list2):
print(item1, item2)
1 a
2 b
3 c
None d
但是之后返回的结果就是 None 了。