在Python中,enumerate是一个内置函数(其实是一个class),用于将一个可遍历的数据对象(如列表、元组或字符串等)组合为一个索引序列,同时列出数据下标和数据本身,一般用在for循环当中。
平常使用中可以替代 range() 和 len()函数,在需要同时遍历索引和元素的情况下,使用 enumerate() 使代码更加简洁和高效。
源代码中大家可以看到enumerate类定义了__iter__ 和__next__魔法方法,之前文章我们也说过定义了这两种方法的可以作为迭代器使用。
函数可以接收2个参数
1)iterable(必须):可迭代对象,如列表、元组、字符串等。
2)start(可选):默认为0。不为0 意思是指定索引的起始值,比如start=1代表索引从1开始而不是从0开始。
使用next()函数打印enumerate函数生成的元素
list1 = ['name', 'age', 'color']
new_iterrable = enumerate(list1)
print(next(new_iterrable))
print(next(new_iterrable))
print(next(new_iterrable))
#结果
(0, 'name')
(1, 'age')
(2, 'color')
可以看出来生成的元素是一个元组类型,第一个元素是索引下标,第二个元素是原序列的内容。
示例:索引从0开始,循环打印元素位置和元素本身
list1 = ['name', 'age', 'color']
for index, value in enumerate(list1):
print(f'Index: {index}, Value: {value}')
#结果
Index: 0, Value: name
Index: 1, Value: age
Index: 2, Value: color
示例:索引从1开始,循环打印元素位置和元素本身
list1 = ['name', 'age', 'color']
for index, value in enumerate(list1,start=1):
print(f'Index: {index}, Value: {value}')
#结果
Index: 1, Value: name
Index: 2, Value: age
Index: 3, Value: color
如果可对象传入的是字典,默认是按照字典的键生成索引序列,除非是给定dict.values()/dict.items()。
dict1= {'name':'wxg', 'age':21, 'color':'black'}
for index, value in enumerate(dict1,start=1):
print(f'Index: {index}, Value: {value}')
#结果
Index: 1, Value: name
Index: 2, Value: age
Index: 3, Value: color
如果传入的对象是集合,大家要注意了 ,因为集合是无序的,得到的索引序列跟实际想要的可能会不一样
set1= {'name','age','color'}
for index, value in enumerate(set1,start=1):
print(f'Index: {index}, Value: {value}')
#结果 原本第二个元素age跑到了第一个位置上。
Index: 1, Value: age
Index: 2, Value: color
Index: 3, Value: name
共勉: 东汉·班固《汉书·枚乘传》:“泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。”
-----指水滴不断地滴,可以滴穿石头;
-----比喻坚持不懈,集细微的力量也能成就难能的功劳。
----感谢读者的阅读和学习和关注,谢谢大家。