zip函数 - 将多个可迭代对象打包为一个元组列表
Python中,zip函数是一个非常方便的方法,可以将多个可迭代对象打包成一个元组列表。这个函数有很多用途,比如可以用来将两个列表合并成一个字典,或者用来进行并行迭代。
在本文中,我们将介绍zip函数的一些基本知识和用法,以及一些常见的应用场景和注意事项。
一、基本知识和用法
zip函数通常被用来将两个或多个列表打包成一个元组列表。其一般语法如下:
zip(*iterables)
其中,*iterables表示任意数量的可迭代对象,比如Python中的列表、元组、集合等等。
zip函数的返回值是一个迭代器,可以用for循环来遍历它,或者使用list()函数将其转换为列表。
示例代码:
a = [1, 2, 3] b = ['a', 'b', 'c'] z = zip(a, b) print(list(z))
输出结果为:
[(1, 'a'), (2, 'b'), (3, 'c')]
这个例子中,我们将两个列表a和b打包成了一个元组列表z,并输出了它的内容。
除了列表以外,我们还可以使用其他可迭代对象,比如元组、字符串、集合等。下面是一些示例代码:
t = (1, 2, 3)
s = 'abc'
set1 = {4, 5, 6}
z1 = zip(t, s)
z2 = zip(a, t)
z3 = zip(a, set1)
print(list(z1))
print(list(z2))
print(list(z3))
输出结果为:
[(1, 'a'), (2, 'b'), (3, 'c')] [(1, 1), (2, 2), (3, 3)] [(1, 4), (2, 5), (3, 6)]
可以看到,不同类型的可迭代对象也可以被打包成元组列表。
二、常见应用场景
zip函数在Python中有很多用处,这里我们介绍一些常见的应用场景。
1. 合并两个列表成一个字典
有时候我们需要将两个列表按照一定的顺序合并成一个字典,比如一个列表存储了姓名,另一个列表存储了年龄,我们可以将它们合并成一个字典,键为姓名,值为年龄。
示例代码:
name = ['Adam', 'Bob', 'John'] age = [20, 25, 30] dic = dict(zip(name, age)) print(dic)
输出结果为:
{'Adam': 20, 'Bob': 25, 'John': 30}
这个例子中,我们将两个列表name和age合并成了一个字典,用zip函数将每个姓名和对应的年龄打包成元组,再用dict函数将其转换成字典。
2. 并行迭代
有时候我们需要同时迭代多个列表,比如一个列表存储了身高,另一个列表存储了体重,我们需要计算每个人的BMI值(身高/体重的平方),这时候就需要并行迭代,即同时迭代这两个列表并计算每个人的BMI值。
示例代码:
height = [1.70, 1.65, 1.80]
weight = [60, 70, 80]
bmi = []
for h, w in zip(height, weight):
bmi.append(w / h ** 2)
print(bmi)
输出结果为:
[20.761245674740484, 25.71166207570287, 24.691358024691358]
这个例子中,我们用for循环对两个列表进行并行迭代,并计算每个人的BMI值,然后将结果存储在一个新的列表bmi中。
除了并行迭代外,zip函数还可以用来进行串行迭代。比如一个列表存储了商品名称,另一个列表存储了商品价格,我们需要对每个商品进行打折,可以用zip函数依次迭代每个商品,然后对其价格进行打折操作。
3. 解压元组列表
有时候我们需要将一个元组列表拆分成多个列表,比如一个元组列表存储了姓名和年龄,我们需要将其拆分成两个列表,其中一个列表存储姓名,另一个列表存储年龄。
示例代码:
data = [('Adam', 20), ('Bob', 25), ('John', 30)]
names, ages = zip(*data)
print(names)
print(ages)
输出结果为:
('Adam', 'Bob', 'John')
(20, 25, 30)
这个例子中,我们先定义了一个元组列表data,其中每个元组包含了姓名和年龄。然后用zip函数对其进行拆分,将姓名和年龄分别存储在两个列表中。注意,在拆分之前,需要在元组列表前加上*符号,表示对其进行解包。
三、注意事项
1. zip函数是一个迭代器,只能遍历一次。如果需要多次使用,需要转换为列表或者存储到一个变量中。
2. 如果传入的可迭代对象长度不一致,zip函数会以最短的对象为准,忽略多余的部分。
3. 如果传入的可迭代对象中有空对象或者None值,zip函数会跳过该对象。在某些情况下可能会出现错误,需要注意检查数据的完整性。
四、总结
Python中的zip函数是一个非常方便的方法,可以将多个可迭代对象打包成一个元组列表,具有广泛的应用场景。在使用之前,需要注意其返回值是一个迭代器,只能一次遍历,以及传入的可迭代对象长度需要一致。在实际应用中,zip函数可以用来合并列表成字典、进行并行迭代、解压元组列表等等,具有很高的实用价值。
