Python的内置函数enumerate()函数用来枚举可迭代对象中的元素,返回可迭代的enumerate对象,其中每个元素都是包含索引和值的元组。
#枚举字符串中的元素
>>> list(enumerate('abcd'))
[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd')]
#枚举列表中的元素
>>> list(enumerate(['Python', 'Greate']))
[(0, 'Python'), (1, 'Greate')]
>>> d = {'a':97, 'b':98, 'c':99}
#枚举字典中的元素
>>> list(enumerate(d.items()))
[(0, ('a', 97)), (1, ('b', 98)), (2, ('c', 99))]
#枚举range对象中的元素
>>> for index, value in enumerate(range(10, 15)):
print((index, value), end=' ')
(0, 10) (1, 11) (2, 12) (3, 13) (4, 14)
#可以指定枚举时索引的起始值,这并不常用
>>> list(enumerate('abcd', 5))
[(5, 'a'), (6, 'b'), (7, 'c'), (8, 'd')]
enumerate对象具有惰性求值特点,就好像一个一端有挡板的管子里有很多外径略小于管子内径的圆球,每次只能打开挡板拿出最前面的圆球,不去拿的时候挡板是关的,不会有圆球出来。并且,已经拿出来的圆球管子里就没有了(可以想象每个圆球都有编号)。
正如上面所说,enumerate对象中已经访问过的元素无法再次访问,在使用时要注意这个问题。另外,zip、filter、map等对象也具有类似的特点。
>>> x = enumerate('abcde')
>>> (0,'a') in x
True
#元素(0,'a')已经访问过了,无法再次访问
>>> (0,'a') in x
False
#不支持使用下标访问其中的元素
>>> x[-1]
Traceback (most recent call last):
File "<pyshell#43>", line 1, in <module>
x[-1]
TypeError: 'enumerate' object is not subscriptable
标签:Python,元素,list,用法,枚举,圆球,enumerate
From: https://blog.51cto.com/u_9653244/6451062