首先,zip()函数是一个迭代器(即遍历的意思),会将多个对象数据对应位置的数据放在元组里并返回一个对象。
data1 = [1, 2, 3, 4]
data2 = ["a", "b", "c", "d"]
data = zip(data1, data2)
print(data)
print(type(data))
以下是代码的输出结果:
<zip object at 0x000001796DD95280>
<class 'zip'>
出现 zip object at ...可以理解为zip()方法是从每个对象的第0个位置开始遍历,首先将每个对象的第0个位置的数据取出来放在一个元组对象里,并将其放在zip对象里(节省内存),然后继续遍历下一个位置的数据(即迭代器),需要查看内容时可以用list()方法将其转化为列表对象。
data1 = [1, 2, 3, 4]
data2 = ["a", "b", "c", "d"]
data = list(zip(data1, data2))
print(data)
print(type(data))
以下是代码的输出结果:
[(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd')]
<class 'list'>
其次,遍历的数据类型可以是列表,元组以及字典的组合,但是对字典对象进行遍历时只会取字典键值对中的"键",而"值"则会丢弃。
data1 = [1, 2, 3]
data2 = ("a", "b", "c")
data3 = {"x": 7, "y": 8, "z": 9}
data = list(zip(data1, data2, data3))
print(data)
以下是代码的输出结果:
[(1, 'a', 'x'), (2, 'b', 'y'), (3, 'c', 'z')]
另外,当遍历的对象长短不一时,则在遍历完长度最短对象的时候就会停止遍历,其他长度更长对象的未遍历到的数据则会"丢弃"。
data1 = [1, 2, 3, 4, 5]
data2 = ("a", "b", "c", "d")
data3 = {"x": 7, "y": 8, "z": 9}
data = list(zip(data1, data2, data3))
print(data)
以下是代码的输出结果:
[(1, 'a', 'x'), (2, 'b', 'y'), (3, 'c', 'z')]
最后,zip(*)可以理解为zip()方法的逆过程,但是返回的是一个元组对象。
data1 = [1, 2, 3]
data2 = ("a", "b", "c")
data3 = {"x": 7, "y": 8, "z": 9}
data = zip(data1, data2, data3)
m, n, k = zip(*data)
print(m, n, k)
以下是代码的输出结果:
(1, 2, 3) ('a', 'b', 'c') ('x', 'y', 'z')