首先理解zip函数的概念,其次在了解zip函数的传参和用法。
zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数, 将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表)。
很明显里面传入的参数是Iterable,Iterable是什么呢?
1、在Python里iterable被认为是一类对象,这类对象能够一次返回它的一个成员(也就是元素)。抽象一点就是适合迭代的对象。
2、最简单的说就是一个数组、字符串、列表都是iterable的.(都是可迭代的)
3、如果一个对象是interable的,表示它可以被遍历。实际上,任何具有__iter__()或__getitem__()方法的对象,Python就认为它是一个iterable。
4、Python里有大量内置的iterable类型,如: list,str,tuple,dict,file,xrange等。使用内置的iter()函数来生成,
所以iterable意思为迭代,可以理解为连续的一组数据,可以遍历的数据,包含内置的string、list、dict、tuple、set()
a = [1,2,3]
b = [2,3,6]
zipper = zip(a,b)
print(zipper) #这里返回的会是一个可遍历的对象
返回结果:
为什么会出现上述现象,返回的是一个对象呢,这就是python2与python3的不同,python2中大部分返回可直接返回list都发生了变动,返回的是一个支持遍历的对象,而不是一个list本身。
在最后返回时加入list,根据zip传入的a,b,相互遍历来匹配对应的元组(tuple)。
a = [1,2,3]
b = [2,3,6]
zipper = zip(a,b)
print(list(zipper)) #返回的是一个list列表
返回结果是:
那如果是匹配的长度不一致呢?
a = [1,2,3,7]
b = [2,3,6]
zipper = zip(a,b)
print(list(zipper)) #返回list列表
结果会根据匹配的元素个数较短的长度为准输出,超过该长度的元素将得不到返回。
结果为:
那么返回结果只有一种类型吗?
zip函数可以转化为字典类型,返回字典类型:
A0 = dict(zip(('a', 'b', 'c', 'd', 'e'), (1, 2, 3, 4, 5)))
print(A0)
结果为:
zip()函数还能用于到for循环中:
x = [1, 2, 3]
y = [4, 5, 6]
for (x, y) in zip(x, y):
print(x, y, x * y)
结果为:
其实就是使用到了zip里面的遍历给(x,y)赋值,循环一次赋值一次,运用到的就是zip本身的用法。