Python: zip()函数 [同时迭代多个序列]

首先我们来了解一下zip()函数的语法。

语法

zip( *iterable)

参数
函数中的iterable参数可以是零个,一个或者多个迭代器。
它们可以是内置的如列表、字典、字符串,或者是用户自定义的迭代器。
返回值

zip()函数的工作原理是创建出一个迭代器,该迭代器可产出元组。
特别地,当传入zip的参数个数是0个是,zip()返回的是一个空的迭代器。
当传入一个参数时,zip()返回的元组迭代器产出的是只有一个元素的元组。传入多个参数的情况依此类推。


当我们编写程序时,有时我们想要迭代的元素包含在多个序列中。如下是一个关于zip()函数的简单用例:

示例一

注意观察传入参数个数变化

l1 = [1, 2, 3, 4, 5]
l2 = ['a', 'b', 'c', 'd', 'e']

for zero_par in zip():     #0个参数
    print(zero_par, end=' ')
print('\n')
print('*' * 40)
for one_par in zip(l1):    #1个参数
    print(one_par, end=' ')
print('\n')
print('*' * 40)
for two_par in zip(l1, l2):    #2个参数
    print(two_par, end=' ')

结果如下所示:
在这里插入图片描述


示例二

前面说过zip()函数接受的参数是迭代器。如果传入了多个参数,那么zip()函数产出的元组中的元素分别来自每个迭代器。当输入的某一个迭代序列中没有元素可以继续迭代时,那么zip函数的整个迭代过程结束。即整个迭代的长度与传入的最短长度的序列的长度相同!

short = ['a', 'b', 'c', 'd']
long_ = ['A', 'B', 'C', 'D', 'E']
for a in zip(short, long_):
    print(a)

输出结果:
在这里插入图片描述
当然,如果你不喜欢这种按最短的结束,你可以使用itertools模块中的zip_longest()函数来替代

from itertools import zip_longest
for a in zip_longest(short, long_):
    print(a)

输出结果:

('a', 'A')
('b', 'B')
('c', 'C')
('d', 'D')
(None, 'E')

zip_longest()函数中的fillvalue参数默认为None, 可以改变它成你想要的值。如fillvalue = 1, 那么最后一项输出就是(1, ‘E’).


应用

当我们有不同的数据需要匹配在一起时,使用zip()函数是一个很好的选择。
假设你是一名老师,你需要把学生的姓名和成绩相对应,两种数据如下所示

names = ["Tom", "Jerry", "Jelly He", "Ben"]
scores = [100, 87, "failed", 92]

for name, score in zip(names, scores):
    print("{} : {}".format(name, score))

输出结果:

Tom : 100
Jerry : 87
Jelly He : failed
Ben : 92

在Python3中,zip()函数返回的是一个迭代器。虽然循环输出让它看起来很像一个保存元组的列表,但如果想要保存数据为列表,要使用list()函数。

a = zip(names, scores)
print(a)
s = list(zip(names, scores))
print(s)

结果如下:
在这里插入图片描述
或者,你想讲这两组数据形成索引的关系,那么你可以使用如下这段代码将他们保存为一个字典。

s = dict(zip(names, scores))
print(s)

结果:{'Tom': 100, 'Jerry': 87, 'Jelly He': 'cheat', 'Ben': 92}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Pythonzip函数是一个内置函数,用于将多个迭代对象打包成一个元组序列迭代器。这些可迭代对象可以是列表、元组、字符串、集合等。zip函数会按照最短的可迭代对象进行打包,生成的元组中每个元素由输入的可迭代对象的对应位置的元素组成。例如,如果有两个列表`a = [1, 2, 3]`和`b = ['a', 'b', 'c']`,使用zip函数可以将它们打包成一个新的列表`[(1, 'a'), (2, 'b'), (3, 'c')]`。 使用zip函数可以方便地进行多个迭代对象的并行遍历。通过将多个迭代对象打包成一个元组序列,我们可以同访问每个可迭代对象的相应元素,这在处理数据的候非常有用。例如,可以使用zip函数来计算两个列表中对应位置的元素之和,或者将两个列表中的元素一一对应起来进行处理。 需要注意的是,zip函数返回的是一个迭代器,而不是一个列表。如果需要得到一个列表,可以使用list()函数迭代器转换为列表。 总而言之,Pythonzip函数是一个非常有用的函数,用于将多个迭代对象打包成一个元组序列迭代器,方便进行并行遍历和处理。<span class="em">1</span> #### 引用[.reference_title] - *1* [Python zip函数打包元素实例解析](https://download.csdn.net/download/weixin_38671819/12857277)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值