Files
2026-05-06 11:21:42 +08:00

70 lines
2.3 KiB
Python

# zip函数的基本用法
# 2.1 概念说明
# zip函数的基本用法是将多个可迭代对象打包成一个迭代器,每次迭代返回一个包含每个输入对象中对应元素的元组。
list1 = [1, 2, 3]
list2 = ["a", "b", "c"]
tuple3 = ("q", "w", "f")
result_zip = zip(list1, list2, tuple3)
# print(list(result_zip)) # [(1, 'a', 'q'), (2, 'b', 'w'), (3, 'c', 'f')]
for item1, item2, item3 in result_zip:
print(f"{item1}:{item2}:{item3}")
# zip函数的拆包技巧
# 3.1 概念说明
# zip函数不仅可以"压缩"多个列表,还可以使用*操作符进行反向操作,将压缩后的结果"解压"回原来的形式。
zipped = [(1, "a"), (2, "b"), (3, "c")]
list1, lis2 = zip(*zipped)
print(list1)
print(lis2)
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)]
transposed_list = [item for sublist in matrix for item in sublist]
print(transposed_list)
# 处理不同长度的可迭代对象
# 4.2 概念说明
# 默认情况下,zip函数会在最短的输入可迭代对象耗尽时停止。对于需要处理不同长度可迭代对象的场景,可以使用itertools.zip_longest函数。
# 定义不同长度的列表
list1 = [1, 2, 3, 4, 5]
# 定义第一个列表(较长)
list2 = ["a", "b"]
# 定义第二个列表(较短)
list3 = [1.1, 2.2, 3.3]
# 定义第三个列表(中等长度)
# 使用普通zip函数
print("1. 使用普通zip函数:")
# 打印使用普通zip函数标题
result_normal = zip(list1, list2, list3)
# 使用普通zip函数压缩列表
print(f"普通zip结果: {list(result_normal)}") # [(1, 'a', 1.1), (2, 'b', 2.2)]
from itertools import zip_longest
# fillvalue 填充值 使用None作为填充值(默认)
result_longest = zip_longest(list1, list2, list3, fillvalue="x")
print(
list(result_longest)
) # [(1, 'a', 1.1), (2, 'b', 2.2), (3, 'x', 3.3), (4, 'x', 'x'), (5, 'x', 'x')]
csv_data = [
["Name", "Age", "City"],
["Alice", "25"],
["Bob", "30", "New York", "Engineer"],
["Charlie", "35", "London"],
]
processed_data = list(zip_longest(*csv_data, fillvalue=""))
print(
processed_data
) # [('Name', 'Alice', 'Bob', 'Charlie'), ('Age', '25', '30', '35'), ('City', '', 'New York', 'London'), ('', '', 'Engineer', '')]