前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python基础:理解enumerate函数和zip函数

Python基础:理解enumerate函数和zip函数

作者头像
fanjy
发布2022-06-04 09:47:12
2K0
发布2022-06-04 09:47:12
举报
文章被收录于专栏:完美Excel完美Excel

标签:Python,enumerate函数,zip函数

本文将通过几个示例介绍Python中的enumerate()函数和zip()函数。

enumerate()函数返回迭代iterables(列表、字典、集等)中所有项的索引,而zip()函数用于聚合或组合多个迭代。

enumerate函数

Python中的enumerate()函数用于检索迭代中所有项的索引。迭代是Python中的项的集合,如列表、字典和集。

虽然可以使用index()函数获取迭代中某个项的索引,但index()函数只返回该项第一次出现的索引。例如,在下面脚本中的nums列表中,整数20出现三次。如果试图打印整数20的索引,将只看到第一次出现的20的索引,即索引位置2。

代码语言:javascript
复制
nums= [10,15,20,25,30,14,20,19,34,14,20,12]
index_20= nums.index(20)
print(index_20)

结果如下图1所示。

图1

使用enumerate()函数,可以获取所有项的索引,即使它们在列表中出现多次。enumerate()函数的作用是:返回“enumerate”类型的对象,如下面脚本的输出所示。

代码语言:javascript
复制
type_enum= type(enumerate(nums))
print(type_enum)

结果如下图2所示。

图2

enumerate()函数的作用是:返回两个项目的元组,其中第一个项目对应于索引,而第二个项目对应于相应迭代中的实际项目。可以将enumerate()函数返回的对象转换为包含索引和相应项的元组列表,如下所示:

代码语言:javascript
复制
print(list(enumerate(nums)))

输出结果如下图3所示。

图3

现在,可以看到nums列表中的所有索引及其对应项。注意,还可以看到多次出现的项的索引,例如整数20和14。

可以使用for循环遍历enumerate()函数返回的元组,如下面的代码所示,其中第一个元组项通过索引0访问,而第二个元组项通过索引1访问。

代码语言:javascript
复制
for i in enumerate(nums):
    print("索引=>",i[0]," - 值 =>",i[1])

结果如下图4所示。

图4

还可以使用元组解包直接访问enumerate()函数返回的元组中的索引和项。下面是一个例子:

代码语言:javascript
复制
for i,j in enumerate(nums):
    print("索引=>",i," - 值 =>",j)

结果如下图5所示。

图5

作为另一个示例,下面的脚本演示了如何使用enumerate()函数获取“nums”列表中整数20的所有索引。

代码语言:javascript
复制
for i in enumerate(nums):
    if i[1] == 20:
        print("值 =>",i[1]," - 索引 =>",i[0])

结果如下图6所示。

图6

还可以通过向start参数传递一个值来重置enumerate()返回的元组的起始索引。例如,下面的脚本将8设置为enumerate()函数返回的元组列表的起始索引值。

代码语言:javascript
复制
for i in enumerate(nums, start = 8):
    print("索引=>",i[0], " - 值 =>", i[1])

结果如下图7所示。

图7

zip函数

Python中的zip()函数用于聚合多个迭代。zip函数的作用是:返回一个元组列表,其中每个元组包含来自原始迭代的匹配索引的项。

下面的脚本包含三个列表:names、ages和genders,每个列表有5项。这些列表通过zip()函数聚合。如果打印zip()函数返回的元组列表,将看到每个元组项都包含来自原始列表中匹配索引的项。例如,第一个元组包含三个项:“john”,20,“male”。这三项分别出现在names、ages和genders列表的第0个索引中。

代码语言:javascript
复制
names= ["john", "nick", "sally","Elizabeth", "Mike"]
ages= [20, 25, 35, 22, 29]
genders= ["male", "male", "female", "female","male"]
records= list(zip(names, ages, genders))
print(records)

结果如下图8所示。

图8

正如在enumerate()函数中看到的那样,可以使用元组解包从zip()函数返回的元组中获取单个项。下面是一个例子:

代码语言:javascript
复制
for name, age, gender in zip(names, ages, genders):
    print("姓名=>",name, " - 年龄=>", age, " -性别=>",gender)

结果如下图9所示。

图9

在某些情况下,使用zip()函数聚合或组合的迭代包含数量不等的项。在这种情况下,只有来自多个迭代的项与最小迭代中的项相对应,才会进行聚合。

例如,在下面的脚本中,genders列表只包含2项。在以下情况下,使用zip()函数聚合names、ages和genders列表将只返回两个元组,其中包含names、ages和genders列表的第0个和第1个索引中的项。

代码语言:javascript
复制
names= ["john", "nick", "sally","Elizabeth", "Mike"]
ages= [20, 25, 35, 22, 29]
genders= ["male", "male"]
records= list(zip(names, ages, genders))
print(records)

结果如下图10所示。

图10

enumerate与zip组合

还可以对zip()函数返回的输出调用enumerate()函数。在这种情况下,enumerate()函数将返回元组,其中元组中第一个索引处的项将对应于zip()函数返回的元组的索引,第二个索引处的项将对应于zip()函数返回的实际元组。下面是一个示例。

代码语言:javascript
复制
names= ["john", "nick", "sally", "Elizabeth","Mike"]
ages= [20, 25, 35, 22, 29]
genders= ["male", "male", "female", "female","male"]
for i, record in enumerate(zip(names, ages, genders)):
    print("索引=>",i, " -姓名=>", record[0], " -年龄=>",record[1], " -性别=>", record[2])

结果如下图11所示。

图11

注意,现在有一个列表的表,其中包含一个关联的索引。

注:本文学习整理自wellsr.com,供有兴趣的朋友参考。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档