如同字面意思,打包。在一些场景中,我们的一个对象包含两种简单属性,比方商品的名称和价格:
name = ["apple", "banana", "cat", "dog"]
price = [1, 2, 3, 4]
如果要把这两个东西绑定起来管理,一种标准的方法自然是利用面向对象的思想弄一个类。而zip提供了一种更简单的方式:
name = ["apple", "banana", "cat", "dog"]
price = [1, 2, 3, 4]
product = zip(name, price)
print(product)
product = list(product)
print(product)
print(type(product[0]))
输出如下:
<zip object at 0x000001C71A2DE308>
[('apple', 1), ('banana', 2), ('cat', 3), ('dog', 4)]
<class 'tuple'>
直接调用zip得到的是一个zip对象,可以使用list方法将其转化为list对象以供使用。而list中存储的则是按原列表顺序匹配得到的一个个tuple。
如果各列表的长度不一,则以最短的列表为准,多余的部分将被直接舍弃:
name = ["apple", "banana", "cat", "dog"]
price = [1, 2, 3]
product = zip(name, price)
product = list(product)
print(product)
输出如下:
[('apple', 1), ('banana', 2), ('cat', 3)]
当然,将两个以上的列表合在一起也是可以的:
name = ["apple", "banana", "cat", "dog"]
price = [1, 2, 3]
num = [6, 7]
product = zip(name, price, num)
product = list(product)
print(product)
输出如下:
[('apple', 1, 6), ('banana', 2, 7)]
本文为了介绍方便起见使用list作为zip的参数,而实际上任何可迭代的对象都是可以用zip来捆绑在一起的。
当然了,有压缩,自然也就有解压。对于满足"列表里面包含多个元组"形式的压缩对象,使用zip(*)进行解压:
name = ["apple", "banana", "cat", "dog"]
price = [1, 2, 3]
num = [6, 7]
product = list(zip(name, price, num))
name1, price1, num1 = list(zip(*product))
print(name1)
print(price1)
print(num1)
输出如下:
('apple', 'banana')
(1, 2)
(6, 7)
注意这里得到的是tuple,有需要的话还得转回list。