Python中的内置函数---zip()
程序员文章站
2022-07-14 16:06:40
...
形式:zip(*iterables)
参数解释:iterables---迭代器:可以是内建的迭代器,比如:字符串、列表、元组、字典、集合等,也可以是用户定义的迭代器,其中需要包含__iter__()方法
返回值:返回一个由元组组成的对象,以下说的都是经过list()之后的列表形式。
1)如果没有参数,将返回一个空的迭代器;
2)如果只有一个参数,将返回一个1-tuple的迭代器,意思是其中每个元组只有一个元素;
3)如果有多个参数,则返回的迭代器中的每个元组的元素个数由最短长度的输入参数决定。
注意:1)zip 方法在 Python 2 和 Python 3 中的不同:在 Python 3.x 中为了减少内存,zip() 返回的是一个对象。如需展示列表,需手动 list() 转换;
2)zip(*)实现解压功能,即将压缩值转换回原来的形式。解压的时候,传入的参数可以为转换后的列表,亦可以是未转换的对象,结果一样(看6、7),刚开始我以为虽然没有进list()转换,但它们指的是一样的;但是双重zip后,结果却不一样(看8、9),如果指的一样,那9就不应该为空列表了吧;所以现在有点搞不明白了,之后再看看源码,搞清楚了补进来!
下面从代码的角度更好的理解:
a = [1,2,3]
b = [4,5,6]
c = [4,5,6,7,8]
no_zip = list(zip()) #1)没有参数:[]
one_zip = list(zip(a)) #2)一个参数:[(1,),(2,),(3,)]
two_zip = list(zip(a,b)) #3)两个参数:[(1, 4), (2, 5), (3, 6)]
two_zip_unequal=list(zip(a,c)) #4)两个长度不等的参数:[(1, 4), (2, 5), (3, 6)]
two_zip_no_list = zip(a,b) #5)不用list的话,返回一个对象:<zip object at 0x000001703ED19908>
zip_unzip = list(zip(*two_zip)) #6)解压-参数为列表:[(1, 2, 3), (4, 5, 6)]
zip_unzip_no_list= list(zip(*two_zip_no_list)) #7)解压-参数为对象:[(1, 2, 3), (4, 5, 6)]
double_zip=list(zip(two_zip)) #8)双重zip-参数为列表:[((1, 4),), ((2, 5),), ((3, 6),)]
double_zip_no_list=list(zip(two_zip_no_list)) #9)双重zip-参数为对象:[]
y1 = list(zip(*[a])) #[(1,), (2,), (3,)]
y2 = list(zip([a])) #[([1, 2, 3],)]
y3 = list(zip(*[a]* 2)) #[(1, 1), (2, 2), (3, 3)]
y4 = list(zip([a] * 2)) #[([1, 2, 3],), ([1, 2, 3],)]
上一篇: Python内置函数_zip函数
下一篇: Manjaro 安装后的配置