zip 返回一个将多个可迭代对象组合成一个元组序列的迭代器。
1. 循环多个list的数据:
1 letters = ['a', 'b', 'c'] 2 nums = [1, 2, 3] 3 4 for letter, num in zip(letters, nums): 5 print("{}: {}".format(letter, num))
2. 将多个list的数据组合成tuple的list:
1 list(zip(['a', 'b', 'c'], [1, 2, 3])) 2 3 # 得到: [('a', 1), ('b', 2), ('c', 3)].
3. 将tuple组成的list拆分成多个tuple:
1 some_list = [('a', 1), ('b', 2), ('c', 3)] 2 letters, nums = zip(*some_list) 3 4 #结果 5 # letters: ('a', 'b', 'c') 6 # nums: (1, 2, 3) 7
*注意,即使不是list,而是tuple,依然可以拆分,拆分后的结果都是tuple:
some_list = (('a', 1), ('b', 2), ('c', 3)) letters, nums = zip(*some_list) #结果同上
*注意,即使不是tuple,是list,依然可以拆分,拆分后的结果都是tuple:
some_list = [['a', 1], ['b', 2], ['c', 3]] letters, nums = zip(*some_list)
举个栗子:
# 将 data 从 4x3 矩阵转置成 3x4 矩阵。 data = ((0, 1, 2), (3, 4, 5), (6, 7, 8), (9, 10, 11)) data_transpose = zip(*data) # 结果: [(0, 3, 6, 9), (1, 4, 7, 10), (2, 5, 8, 11)]
*值得注意的是:
zip 用于整合数据的时候,返回的是一个可迭代的迭代器,可以用来循环,也可以通过 list() , tuple() 方法把它变成list或tuple
zip 用于拆分数据的时候,可以拆分list,拆分tuple,但返回的总是一个list,并且list的每个元素都是tuple