原文链接
定义
像拉链一样,将多个可迭代对象组合起来,然后可以用
for
循环依次取出,或者一次性将结果存入 列表、元组 或者 字典 之类的容器中。 它的结果是一个 迭代器,迭代器生成的元素是 元组 ,第i
个元素来自各可迭代对象的第i
个元素。
o2=['张三','18','游戏']
o1=('name','age','hobby')
# 存入列表
l=list(zip(o1,o2))
# 存入元组
t=tuple(zip(o1,o2))
# 存入字典
d=dict(zip(o1,o2))
# for循环,返回的是元组
for i in zip(o1,o2):
print(i)
可以是多个 iterable 对象,且长度可以不同,当长度不同时,取最短的长度。
o2=['张三','18','游戏']
o1=('name','age','hobby')
o3=range(5)
o4=itertools.count()
for i in zip(o1,o2,o3,o4):
print(i)
# 输出结果
('name', '张三', 0, 0)
('age', '18', 1, 1)
('hobby', '游戏', 2, 2)
注意:
zip()
默认只会遍历字典的key
值。
zip(*)
星号(*
)操作符可以 解包(unpacking),将一个列表分解多个参数给 zip()
,重新组合。
o5=[('a',1),('b',2),('c',3)]
for i in zip(*o5):
print(i)
# 输出
('a', 'b', 'c')
(1, 2, 3)
应用
二维矩阵转置
a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print [ [row[col] for row in a] for col in range(len(a[0]))] #方法 1
[i for i in map(list, zip(*a))] #用 zip 实现转置