zip
一、说明
zip([iterable, …])
参数iterable为可迭代的对象,并且可以有多个参数。
该函数返回一个以元组为元素的对象,其中第 i 个元组包含每个参数序列的第 i 个元素。
返回的对象长度被截断为最短的参数序列的长度。
只有一个序列参数时,它返回一个1元组的对象。没有参数时,它返回一个空的对象。
我们可以使用 list() 转换来输出列表。
pyhton2 和python3不同。因为不适用Python2。异同点不再描述。
二、创建
list_1 = list('hello') list_2 = list('world') list_3 = list('python') tuple_1 = tuple(list_1) list_4 = [] # 因为zip对象无法打印出来。所以会把zip转化为list. zip_1 = list(zip(list_1, list_2)) zip_2 = list(zip(list_1, list_3)) # 各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同 zip_3 = list(zip(list_1, list_4)) # 如果存在空的迭代器,返回空列表 zip_4 = list(zip(list_1, tuple_1, list_2, list_3)) # 迭代器可以是各种形式的,也可以是多个 zip_5 = zip(list_1, list_3) list_5, list_6 = zip(*zip_5) # 可以理解为解压 print('zip_1:', zip_1) print('zip_2:', zip_2) print('zip_3:', zip_3) print('zip_4:', zip_4) print('list_5:', list_5) print('list_6:', list_6)
三、遍历
list_1 = list('hello') list_2 = list('world') for i in zip(list_1, list_2): print(i) print('**'*20) for hello, world in zip(list_1, list_2): print(hello, world)
四、转化
list_a = list('hello') list_b = list('world') zip_1 = zip(list_a, list_b) list_1 = list(zip_1) list_2 = list(zip(list_a, list_b)) # 注意和list_1结果一致 tuple_1 = tuple(zip_1) tuple_2 = tuple(zip(list_a, list_b)) # 注意和tuple_1结果不一致 dict_1 = dict(zip_1) dict_2 = dict(zip(list_a, list_b)) # 注意和dict_1结果不一致 print('list_1: ', list_1) print('list_2: ', list_2) print('tuple_1: ', tuple_1) print('tuple_2: ', tuple_2) print('dict_1: ', dict_1) print('dict_2: ', dict_2)
五、补充
itertools模块中的zip_longest。返回的对象长度被截断为最长的参数序列的长度。
import itertools list_1 = list('hello') list_2 = list('world') list_3 = list('python') zip_1 = list(itertools.zip_longest(list_1, list_3)) print(zip_1)