zip()
是Python内置的一个非常有用的函数,它用于将多个可迭代对象(如列表、元组等)中的元素"打包"成一个个元组,然后返回由这些元组组成的对象。
基本用法
numbers = [1, 2, 3]
letters = ['a', 'b', 'c']
zipped = zip(numbers, letters)
# 转换为列表查看内容
print(list(zipped)) # 输出: [(1, 'a'), (2, 'b'), (3, 'c')]
特点
-
长度不一致时的处理:当传入的可迭代对象长度不一致时,
zip()
会以最短的那个为准numbers = [1, 2, 3, 4] letters = ['a', 'b', 'c'] print(list(zip(numbers, letters))) # 输出: [(1, 'a'), (2, 'b'), (3, 'c')]
-
解压:可以使用
*
运算符来解压zipped = [(1, 'a'), (2, 'b'), (3, 'c')] numbers, letters = zip(*zipped) print(numbers) # 输出: (1, 2, 3) print(letters) # 输出: ('a', 'b', 'c')
-
多个可迭代对象:可以同时处理多个可迭代对象
numbers = [1, 2, 3] letters = ['a', 'b', 'c'] symbols = ['!', '@', '#'] print(list(zip(numbers, letters, symbols))) # 输出: [(1, 'a', '!'), (2, 'b', '@'), (3, 'c', '#')]
实际应用
-
并行迭代:
for num, letter in zip(numbers, letters): print(f"Number: {num}, Letter: {letter}")
-
创建字典:
keys = ['name', 'age', 'gender'] values = ['Alice', 25, 'Female'] person = dict(zip(keys, values)) print(person) # 输出: {'name': 'Alice', 'age': 25, 'gender': 'Female'}
-
矩阵转置:
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)]
注意事项
- 在Python 3中,
zip()
返回的是一个迭代器对象,而不是列表。如果需要列表,需要使用list()
进行转换。 - 一旦迭代器被消耗(例如转换为列表或用于循环),它就不能再次使用。如果需要多次使用,应该先转换为列表或重新创建。
zip()
函数是Python中处理并行迭代和数据组合的强大工具,掌握它可以大大提高编码效率。