使用enumerate来枚举可遍历对象

初识枚举函数 enumerate()

今天我们来认识一下 Python 的 enumerate 这个内置的函数,
它就是专门用来枚举可迭代对象的,
通过它我们可以在每次迭代的过程中,
获取到具体的索引、数据和下标。

enumerate 函数语法

enumerate(iterable[, start])

要得到一个 enumerate对象很简单
直接调用 enumerate 方法,把可迭代对象传入就可以了

1
2
list1 = ['hi', 'fxxk', 'Python', 'handsomeb']
print(enumerate(list1))

<enumerate object at 0x02E33850>

当我们执行了 enumerate 方法之后,
它会直接把我们传递进去的可迭代对象
生成含有索引和对应的值的 enumerate 对象,
所以这个对象是可以使用 for 循环的:

1
2
3
4
list1 = ['hi', 'fxxk', 'Python', 'handsomeb']

for item in enumerate(list1):
print(item)

(0, ‘hi’)
(1, ‘fxxk’)
(2, ‘Python’)
(3, ‘handsomeb’)

enumerate 函数可以传两个参数,
一个就是我们刚说的可迭代对象,
另一个就是数字,
这个数字的作用就是让 enumerate 从指定位置(默认为0)开始计数,
也就是说,如果我们希望 enumerate 对我们传进去的可迭代对象从第 5 开始生成,
那么就可以这样:

1
2
3
4
list1 = ['hi', 'fxxk', 'Python', 'handsomeb']

for item in enumerate(list1, 5):
print(item)

(5, ‘hi’)
(6, ‘fxxk’)
(7, ‘Python’)
(8, ‘handsomeb’)

在枚举的时候
也可以将得到的 enumerate 对象的计数单独拿到

1
2
3
4
list1 = ['hi', 'fxxk', 'Python', 'handsomeb']

for count, value in enumerate(list1):
print(count)

0
1
2
3

当然,也可将得到的 enumerate 对象转换成列表

1
2
3
4
list1 = ['hi', 'fxxk', 'Python', 'handsomeb']

list2 = list(enumerate(list1))
print(list2)

[(0, ‘hi’), (1, ‘fxxk’), (2, ‘Python’), (3, ‘handsomeb’)]

那些需要我们做一些计数相关的
或者需要将数字与元素做一些对应关系的时候
就可以使用 enumerate 进行枚举获取,
其内部主要是帮我们做了这样的操作:
enumerate 函数内部实现大概原理如下:

1
2
3
4
5
def enumerate(sequence, start=0):
n = start
for elem in sequence:
yield n, elem
n += 1

简单应用举例

将月份的英语单词与数字月进行对应

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
month = [
'January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September',
'October',
'November',
'December']

for num, value in enumerate(month, 1):
print(f'{num}月 -》{value}')

1月 -》January
2月 -》February
3月 -》March
4月 -》April
5月 -》May
6月 -》June
7月 -》July
8月 -》August
9月 -》September
10月 -》October
11月 -》November
12月 -》December

以上就是 enumerate 对象的使用方式。