zip 方法在 Python 2 和 Python 3 中的不同:在 Python 3.x 中为了减少内存,zip() 返回的是一个对象。如需展示列表,需手动 list() 转换。
用法,zip(iterable, ......) 参数,一个或多个迭代器。
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。
a = [1, 2, 3]
b = [1, 2, 3]
c = [1, 2, 3, 4]
ab = list(zip(a, b))
bc = list(zip(b, c))
abc = list(zip(a, b, c))
re = list(zip(*abc))
print(ab)
#[(1, 1), (2, 2), (3, 3)]
print(bc)
#[(1, 1), (2, 2), (3, 3)]
print(abc)
#[(1, 1, 1), (2, 2, 2), (3, 3, 3)]
print(re)
#[(1, 2, 3), (1, 2, 3), (1, 2, 3)]
在运行zip(*abc)之前,abc的值是:[(1, 1, 1), (2, 2, 2), (3, 3, 3)]
那么,zip(*abc) 等价于 zip((1, 1, 1), (2, 2, 2), (3, 3, 3))
所以,运行结果是:[(1, 2, 3), (1, 2, 3), (1, 2, 3)]
正如:
nums = ['flower','flow','flight']
list(zip(*nums))=[('f', 'f', 'f'),
('l', 'l', 'l'),
('o', 'o', 'i'),
('w', 'w', 'g')]
应用1:
l = ['a', 'b', 'c', 'd', 'e','f']
print l
#打印列表
print(list(zip(l[:-1],l[1:])))
输出结果:
['a', 'b', 'c', 'd', 'e', 'f']
[('a', 'b'), ('b', 'c'), ('c', 'd'), ('d', 'e'), ('e', 'f')]
应用2:
对列表的元素进行算数运算。
a = [1, 2, 3]
b = [4, 5, 6]
c = [x + y for x, y in list(zip(a, b))]
d = list(map(lambda x : x[1] + x[0], list(zip(a, b))))
print(c)
#[5, 7, 9]
print(d)
#[5, 7, 9]