【Python】zip()函数详解

Python中的 zip() 函数是一个非常有用的内建函数,用于将多个可迭代对象(例如:列表、元组、字典等)聚合成一个元组,返回由这些元组组成的对象。

1. zip()用法

1.1 基本用法

zip() 函数用于将多个可迭代对象中的元素按位置组合成元组。下面是一个基本的示例:

a = [1,2,3]
b = ["a", "b", "c"]
c = zip(a, b)
for i in c:
	print(i)

代码输出:

(1, 'a')
(2, 'b')
(3, 'c')

1.2 不等长的可迭代对象

如果输入可迭代对象长度不同,zip() 会根据最短的可迭代对象来进行压缩,多余的元素将会被丢弃:

list1 = [1, 2, 3]
list2 = ('a', 'b')
result = zip(list1, list2)
print(list(result))

代码输出:

[(1, 'a'), (2, 'b')]

可以看到,list1 中的 3 被丢弃,因为 list2 长度为 2。

1.3 多个可迭代对象

zip() 支持多个可迭代对象。可以将它们按顺序组合在一起

list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
list3 = [True, False, True]
result = zip(list1, list2, list3)
print(list(result))

代码输出:

[(1, 'a', True), (2, 'b', False), (3, 'c', True)]

1.4 zip和字典

如果传入的可迭代对象是字典,zip() 会按键进行配对。因此,通常会结合 dict() 使用来创建字典。

keys = ['name', 'age', 'city']
values = ['Alice', 25, 'New York']
result = zip(keys, values)
dictionary = dict(result)
print(dictionary)

代码输出:

{'name': 'Alice', 'age': 25, 'city': 'New York'}

1.5 解压zip

zip() 生成的结果是一个迭代器, 对于已经压缩的数据我们可以使用 zip(*iterables) 来进行解压缩操作

list1 = [1, 2, 3]
list2 = ('a', 'b', 'c')
result = zip(list1, list2)
# 解压
unpacked = zip(*result)
print(list(unpacked))   

代码输出:

[(1, 2, 3), ('a', 'b', 'c')]

2. zip() 应用场景

2.1 并行遍历多个序列

zip() 函数常用于并行遍历多个序列,在循环中挨个取出每一个序列中对应元素的位置

names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]
for name, age in zip(names, ages):
    print(f"{name} is {age} years old.")

2.2 构建字典

如前所述,zip() dict() 结合使用可以非常方便的创建字典

keys = ['name', 'age', 'city']
values = ['Alice', 25, 'New York']
result = dict(zip(keys, values))
print(result)

2.3 用于矩阵转置

在某些情况下,zip() 可以用于矩阵转置等操作。例如,将多个行合并为列,或将多个列合并为行:

matrix = [(1, 2, 3), (4, 5, 6), (7, 8, 9)]
transposed = zip(*matrix)
print(list(transposed))

代码输出:

[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值