当前位置:首页>python>Python-zip函数

Python-zip函数

  • 2026-09-08 22:39:02
Python-zip函数

在Python中, zip函数通常用来配对. 其可以接收一个或者多个可迭代对象(列表、元组、字符串等), 然后将他们对应下标的元素打包成一个个元组.

# 实例
names = ["Alice", "Bob", "Charlie"]
ages = [20,18,22]
zipped = zip(names, ages) # 返回迭代器
print(list(zipped))
# [("Alice", 20), ("Bob", 18), ("Charlie",22)]


假如说zip接收的列表长度不同, 则会以长度最短的列表为基准, 把多出来的部分全部抛弃掉

list_a = [1, 2, 3, 4, 5]   # 长度为 5
list_b = ['A', 'B']        # 长度为 2

print(list(zip(list_a, list_b)))
# [(1, 'A'), (2, 'B')] 

如果不想让元素被抛弃, 可以用itertools.zip_longest. 它是以长度最长的列表为基准, 默认用None来填补,或者我们也可以用自己用fillvalue来填补.

另外, 我们还可以用操作符来解包.其语法为zip(*...).下面为多种应用场景.

# 1. 还原zip过的数据
pairs = [("Alice", 20), ("Bob", 18), ("Charlie",22)]
names, ages = zip(*pairs)
print(names)
# ("Alice", "Bob", "Charlie")
print(ages)
# (20, 18, 22)  

# 2. 矩阵转置
# 按列提取转化为行
matrix = [
    [1, 2, 3],  # 第一行
    [4, 5, 6],  # 第二行
    [7, 8, 9]   # 第三行
]
transposed = list(zip(*matrix))
print(transposed)
# [(1, 4, 7), 
#  (2, 5, 8), 
#  (3, 6, 9)]

总而言之, zip通常有三大经典场景:
1.并行遍历 2.快速创建字典 3.列表切块

# 列表切块
cards = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]

# 把一维列表按每 4 个一组切分开
chunked = zip(*[iter(cards)] * 4)

for row in chunked:
    print(row)

# (1, 2, 3, 4)
# (5, 6, 7, 8)
# (9, 10, 11, 12)
# (13, 14, 15, 16)

最新文章

随机文章