如何在Python中使用zip()函数对两个序列进行打包
发布时间:2023-06-01 10:37:44
Python语言中提供了非常好用的函数库,其中之一就是zip()函数。该函数可以将任意数量的序列中的元素按照顺序打包起来,尤其适用于对两个序列进行打包的场景。本文将详细讲述在Python中使用zip()函数对两个序列进行打包的用法,并提供几个示例。
#### 1. 基本用法
在Python中,zip()函数的基本语法为:
zip([seq1 [, seq2 [...]]])
其中,seq1、seq2……等表示要打包的不同序列,这些序列必须是可迭代的对象,例如列表、元组等。zip()函数返回一个zip对象,该对象包含了所有的元素,每个元素是一个元组,其中第i个元组包含来自每个参数序列或 iterable 的第 i个元素。例如:
a = [1, 2, 3] b = [4, 5, 6] c = zip(a, b) # 打包为元组的列表 print(c) # 输出:<zip object at 0x00000000029E3A48> for i in c: print(i) # 输出:(1, 4) (2, 5) (3, 6)
#### 2. 打包后元素不等长的情况
因为zip()函数将元素按照顺序打包,所以在序列长度不等的情况下,可以使用zip_longest()函数将元素打包。该函数的用法为:
itertools.zip_longest(*iterables, fillvalue=None)
其中,fillvalue=None 表示用来填充两个序列长度不一致的部分的默认值。例如:
import itertools a = [1, 2] b = [4, 5, 6] c = zip_longest(a, b, fillvalue=0) print(list(c)) # 输出:[(1, 4), (2, 5), (0, 6)]
#### 3. 打包为字典的用法
除了将元素打包成元组的列表之外,zip()函数还可以将元素打包成字典。例如:
a = ["name", "age", "gender"]
b = ["Tom", 18, "male"]
d = dict(zip(a, b)) # 打包为字典
print(d) # 输出:{'name': 'Tom', 'age': 18, 'gender': 'male'}
#### 4. 用法示例
下面提供几个使用zip()函数对两个序列进行打包的示例。
1)统计列表中各元素出现的次数
a = [1, 2, 1, 3, 2, 4, 1, 2]
b = set(a)
c = [a.count(i) for i in b]
d = dict(zip(b, c))
print(d) # 输出:{1: 3, 2: 3, 3: 1, 4: 1}
2)交叉打印两个序列
a = ["Tom", "Jerry", "Spike"]
b = ["cat", "mouse", "dog"]
for i, j in zip(a, b):
print(i, "-", j)
输出:
Tom - cat Jerry - mouse Spike - dog
3)矩阵转置
a = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
b = zip(*a)
print(list(b)) # 输出:[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
通过本文的介绍,相信读者已经掌握了如何在Python中使用zip()函数对两个序列进行打包的用法。使用zip()函数可以使程序更加简洁、高效,是Python编程中必不可少的一部分。
