Python:【基础语法】 zip()函数


zip()函数

1.描述

Python3中zip()函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象。通常使用环境为不同的迭代器对应元素之间有关联。

2.语法

zip([iterable, ...])

3.参数

  • iterable -- 若干个(>=1)迭代器

4.返回值

返回一个zip对象
1.如果各个迭代器的元素个数不一致,则返回对象的长度与最短的迭代器相同
2.利用 * 号操作符,可以将元组解压为列表(n元组即解压为n个列表)
3.使用 list() 转换zip对象来输出列表

5.实例

(1) 打包

>>>a=[1,5,9]
>>>b=[2,6,10]
>>>zipped=zip(a,b)
>>>zipped
#输出zip对象


#转换成列表输出
>>>lis=list(zipped)
>>>lis
#输出列表,元素为二元组
[(1, 2), (5, 6), (9, 10)]

(2) 解压

即使用zip(*zipped)操作,返回元组(个数为打包的迭代器个数)

>>>a=[1,5,9]
>>>b=[2,6,10]
>>>zipped=zip(a,b)
>>>a1,a2=zip(*zipped)
>>>a1
#a1,a2均为元组
(1, 5, 9)

>>>a1=list(a1)
>>>a1
[1, 5, 9]

#简洁写法
>>>res=zip(*zip(a,b))
>>>a1,a2=[list(x) for x in res]
>>>a1
>>>a2
[1, 5, 9]
[2, 6, 10]

【注意】
zip 是一个生成器的函数,它的结果是一个迭代器,该结果只能调用一次

如,将上面两个例子写在一起的话会出现

>>>a=[1,5,9]
>>>b=[2,6,10]
>>>zipped=zip(a,b)
>>>lis=list(zipped)
>>>res=zip(zipped)
>>>a1,a2=[list(x) for x in res]

第四行时,调用过依次zipped这个zip函数的结果,而在第五行有调用,此时zipped为空,报错:

(3) 应用场景

场景描述:两个 list 一一对应,将一个 list 排序,要求另一个 list 随之排序

点击查看代码
a=[9,1,5]
b=[10,2,6]
#打包
zipped=zip(a,b)
#排序,以序列a为基准排序,得到对应的b在a的排序后的序列结果
lis=sorted(zipped,key=lambda x:x[0])
#解压
res=zip(*lis)
a1,a2=[list(x) for x in res]
print(a1)
print(a2)

结果为:

[1, 5, 9]
[2, 6, 10]

其中,关于sorted(),见