What does enumerate() mean?
因此,对于
演示:
1 2 3 4 5 6 7 8 9 10 11 12 13 | >>> elements = ('foo', 'bar', 'baz') >>> for elem in elements: ... print elem ... foo bar baz >>> for count, elem in enumerate(elements): ... print count, elem ... 0 foo 1 bar 2 baz |
默认情况下,
1 2 3 4 5 6 | >>> for count, elem in enumerate(elements, 42): ... print count, elem ... 42 foo 43 bar 44 baz |
如果你在Python中重新实现
1 2 3 4 5 | from itertools import count def enumerate(it, start=0): # return an iterator that adds a counter to each element of it return zip(count(start), it) |
和
1 2 3 4 5 | def enumerate(it, start=0): count = start for elem in it: yield (count, elem) count += 1 |
C中的实际实现更接近于后者,优化了将单个元组对象重用于常见的
它是内置生成器函数,请参阅http://docs.python.org/2/library/functions.html#enumerate。
简而言之,它产生迭代器的元素,以及索引号:
1 2 | for item in enumerate(["a","b","c"]): print item |
版画
1 2 3 | (0,"a") (1,"b") (2,"c") |
如果你想循环遍历一个interator,并且想要一个索引计数器,它会很有用。如果您希望计数器从某个其他值(通常为1)开始,您可以将其作为
我正在阅读Brett Slatkin的一本书('Effective Python'),他展示了另一种迭代列表的方法,并且还知道列表中当前项目的索引。
但建议不要使用它而是使用
我知道你问的枚举是什么意思,但是当我理解了以下内容时,我也理解了
1 2 3 4 | list_of_letters = ['a', 'b', 'c'] for i in range(len(list_of_letters)): letter = list_of_letters[i] print (i, letter) |
输出是:
1 2 3 | 0 a 1 b 2 c |
在我阅读
1 2 3 4 | i = 0 for n in list_of_letters: print (i, n) i = i +1 |
它产生相同的输出。
但是使用
1 2 3 | list_of_letters = ['a', 'b', 'c'] for i, letter in enumerate(list_of_letters): print (i, letter) |
正如其他用户所提到的,
所以如果你有一个列表
现在,这有用吗?一个可能的用例是当你想迭代项目时,你想要跳过一个你只知道列表中的索引而不是它的值的特定项目(因为它的值当时是未知的)。
1 2 3 4 5 | for index, value in enumerate(joint_values): if index == 3: continue # Do something with the other `value` |
因此,您的代码读取效果更好,因为您还可以使用
虽然另一个用户提到了使用
1 2 | def enumerate(l, start=0): return zip(range(start, len(l) + start), l) |
例:
1 2 3 | l = ["test_1","test_2","test_3"] enumerate(l) enumerate(l, 10) |
输出:
[(0, 'test_1'), (1, 'test_2'), (2, 'test_3')]
[(10, 'test_1'), (11, 'test_2'), (12, 'test_3')]
正如评论中所提到的,这种带范围的方法不适用于原始
枚举函数的工作原理如下:
1 2 3 4 | doc ="""I like movie. But I don't like the cast. The story is very nice""" doc1 = doc.split('.') for i in enumerate(doc1): print(i) |
输出是
1 2 3 | (0, 'I like movie') (1," But I don't like the cast") (2, ' The story is very nice') |