【转载】Python zip() 详解

32 阅读1分钟

原文链接

python zip() 详解

定义

像拉链一样,将多个可迭代对象组合起来,然后可以用 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 实现转置