欢迎访问宙启技术站
智能推送

如何在Python中使用zip()函数对两个序列进行打包

发布时间:2023-06-01 10:37:44

Python语言中提供了非常好用的函数库,其中之一就是zip()函数。该函数可以将任意数量的序列中的元素按照顺序打包起来,尤其适用于对两个序列进行打包的场景。本文将详细讲述在Python中使用zip()函数对两个序列进行打包的用法,并提供几个示例。

#### 1. 基本用法

在Python中,zip()函数的基本语法为:

zip([seq1 [, seq2 [...]]])

其中,seq1seq2……等表示要打包的不同序列,这些序列必须是可迭代的对象,例如列表、元组等。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编程中必不可少的一部分。