目录
🚀 个人主页:xmp65535
🚀 专栏:python技术专栏
Python 中的 zip 函数是一个内置函数,它用于将多个可迭代对象(如列表、元组或字符串)中的元素打包成一个元组列表。每个元组包含来自所有输入可迭代对象的对应元素。这个强大的函数简化了许多涉及并行迭代的常见任务。
zip 的基本用法是将两个或多个可迭代对象作为参数,返回一个 zip 对象。这个 zip 对象是一个可迭代的,包含元组的序列,每个元组从每个输入可迭代对象中取出一个元素。
语法:
zip(iterable1, iterable2, ...)
iterable1
, iterable2
, ... : 用于打包的可迭代对象,可以是多个,甚至可以为空。返回值:
示例:
- list1 = [1, 2, 3]
- list2 = ['a', 'b', 'c']
- zipped = zip(list1, list2)
- print(list(zipped)) # 输出:[(1, 'a'), (2, 'b'), (3, 'c')]
当输入的可迭代对象长度不一致时,zip 会停止到最短的可迭代对象结束。这意味着长于其他对象的迭代对象的剩余部分将不会出现在 zip 结果中。
- numbers = [1, 2, 3]
- letters = ['a', 'b']
- zipped = zip(numbers, letters)
- print(list(zipped))
输出将是:
[(1, 'a'), (2, 'b')]
*
运算符进行解压zip 还可以与 *
运算符结合使用,进行所谓的解压操作。这可以将 zip 对象转换回原来的可迭代对象列表。
- zipped = [(1, 'a'), (2, 'b'), (3, 'c')]
- numbers, letters = zip(*zipped)
- print(list(numbers))
- print(list(letters))
输出将是:
- [1, 2, 3]
- ['a', 'b', 'c']
zip 函数在需要并行迭代多个可迭代对象时非常有用。例如,当你需要同时遍历多个列表,并在相同位置进行操作时。
- names = ['Alice', 'Bob', 'Charlie']
- ages = [24, 50, 18]
- countries = ['Italy', 'USA', 'Canada']
-
- for name, age, country in zip(names, ages, countries):
- print(f'{name} is {age} years old and comes from {country}')
zip 也可以用来创建字典,将一系列的键和值配对。
- keys = ['name', 'age', 'gender']
- values = ['Alice', 28, 'Female']
-
- info_dict = dict(zip(keys, values))
- print(info_dict)
输出将是:
{'name': 'Alice', 'age': 28, 'gender': 'Female'}
假设你在处理一个项目,需要从三个不同的列表中提取数据来生成一个综合信息列表。每个列表分别存储了用户的姓名、年龄和职业。
- names = ["Alice", "Bob", "Charlie"]
- ages = [25, 30, 35]
- occupations = ["Engineer", "Doctor", "Artist"]
-
- for name, age, occupation in zip(names, ages, occupations):
- print(f"{name} is {age} years old and works as a(n) {occupation}.")
这个例子展示了如何利用 zip
同时遍历多个列表,并在每次迭代中打印出对应的信息。
zip
函数非常适合于将两个列表合并成一个字典,其中一个列表包含键,另一个列表包含值。这种方法特别有用,特别是在处理数据结构转换时。
- properties = ["name", "age", "occupation"]
- values = ["Alice", 25, "Engineer"]
-
- user_info = dict(zip(properties, values))
- print(user_info)
输出:
{'name': 'Alice', 'age': 25, 'occupation': 'Engineer'}
你还可以使用 zip
结合列表推导来对数据进行筛选。
- numbers = [1, 2, 3, 4, 5, 6]
- letters = ['a', 'b', 'c', 'd', 'e', 'f']
-
- # 只选择索引为偶数的元素
- filtered_pairs = [(num, letter) for index, (num, letter) in enumerate(zip(numbers, letters)) if index % 2 == 0]
-
- print(filtered_pairs)
输出:
[(1, 'a'), (3, 'c'), (5, 'e')]
这个例子展示了如何仅选择索引为偶数的元素对。