# 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', '')]