Python中超好用的“枚举函数”:enumerate

共 2344字,需浏览 5分钟

 ·

2021-03-27 09:38

enumerate() 函数的简单介绍

我们先来看看enumerate() 函数的概念:
  • enumerate() 函数:用于将一个可迭代的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
再来看看enumerate() 函数的语法结构:
  • enumerate(sequence, [start=0]),其中sequence是一个可迭代序列,start是一个可选参数,表示序列下标的起始位置;
关于enumerate()函数,有以下几点需要注意:
  • ① enumerate()函数是Python中的内置函数,可以直接配合for循环使用;
  • ② 默认情况下,start参数索引计数器是从零开始计数的,但是你可以将其设置为任意的整数;
  • ③ enumerate()函数得到的是多个值,我们需要采用“序列解包”的方式,获取到每一个元素;
在使用enumerate()函数之前,有两个概念我需要给大家解释一下:
第一个概念是“可迭代对象”
通俗的讲:可迭代指的就是我们可以循环获取其中的每一个元素。某对象可以使用for循环的必要条件是该对象是可迭代的。
你可能还不知道什么是可迭代对象,这里也不过多的去解释,你如果想深入了解它,可以自行下去查资料,但是这里我要讲述 “如何判断一个对象是可迭代对象”
  • 可以通过內置函数isinstance()来判断一个对象是否为可迭代对象。
>>> from collections.abc import Iterable
>>> isinstance("黄同学", Iterable)
True
>>> isinstance([1,True,2.3],Iterable)
True
>>> isinstance(1, Iterable)
False
>>> isinstance(range(10), Iterable)
True
通过上述代码演示,我们就知道哪些对象是可迭代对象,可以使用for循环,哪些对象不是可迭代对象,也不能使用for循环。
在Python基础中,我们还将到了一个“序列”的概念,其实序列也是一种可迭代对象,其中列表( list)、元组( tuple)、字符串( str)等都是序列,因此它们也都是可迭代对象,也就都可以配合enumerate()函数使用了。
第二个概念是“序列解包”
通俗的说:就是一次将多个变量赋值给多个值。很简单,不要想的太高深,我们简单举个例子你就知道了。
x,y = (12,54)
print(x)
print(y)
结果如下:

enumerate() 函数的简单使用

该函数最常就是配合for循环使用,我们就以此为例,为大家演示enumerate() 函数的用法。
需求:打印出班级中大于18岁的同学名字;
如果使用普通的for循环:
i = 0
name = ["张三","李四","王五"]
lis = [13,22,43]
for element in lis:
    if element >= 18:
        print(i, name[i],lis[i])
    i += 1
结果如下:
如果for循环,配合enumerate()函数使用:
name = ["张三","李四","王五"]
lis = [13,22,43]

for index,value in enumerate(lis):
    if value >= 18:
        print(index,name[index],value)
结果如下:
普通for循环我也就不多说了。仔细观察for循环+enumerate()函数的搭配使用,序列使用过该函数后,会返回元素下标和元素组合的元组,我们采用序列解包的方式,将其赋值给了index和value,其中index表示lis列表中每个元素的下标,value表示lis列表中每个元素的值,如下图所示:
接着再仔细观察上图,可以发现:enumerate()函数默认序列第一个元素的下标为0,这个也是和Python中序列的元素访问一致。但是有时候,我们就想让第一个元素的下标变为1,第二个元素的下标变为2,怎么办呢?
从上图可以看出:enumerate()函数中有一个start参数,很好的帮我们解决了上述问题。

更多阅读



2020 年最佳流行 Python 库 Top 10


2020 Python中文社区热门文章 Top 10


5分钟快速掌握 Python 定时任务框架

特别推荐




点击下方阅读原文加入社区会员

浏览 75
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报