Python有enumerate()
迭代带有索引的对象。我怀疑解释器创建了很多int对象,其唯一目的是跟踪事物的位置。 PEP page 说了以下内容,但我真的不明白幕后发生了什么:
它为所有迭代提供了iteritems()为字典提供的相同优势 - 一种紧凑,可读,可靠的索引符号。
那么这里的魔力是什么?
答案 0 :(得分:11)
enumerate()
是一个迭代器;它只能动态生成索引int
值 ;它不能预先产生它们。
您可以尝试阅读enumobject.c
source code,但它基本上可以像这样翻译成Python:
def enumerate(iterable, start=0):
count = start
for elem in iterable:
yield count, elem
count += 1
yield
关键字使其为generator function,您需要循环生成器(或在其上调用next()
)以推进函数生成数据,{{1}一次调用。
Python也实习yield
个值,-5到256(含)之间的所有值都是单例,所以上面的代码甚至不会生成新的int
个对象,直到达到257。
答案 1 :(得分:2)
它可以帮助你了解事物的所在......
l = ['apple', 'banana', 'cabbage']
for idx, item in enumerate(l):
print "the item: %s, is at position %s" % (item, idx)
>>>
the item: apple, is at position 0
the item: banana, is at position 1
the item: cabbage, is at position 2
这有助于以下场景..想象一下,您想要找到列表中的每个“卷心菜”项目。并了解他们的指数。
l = ['apple', 'banana', 'cabbage', 'monkey', 'kangaroo', 'cabbage']
def find_indexes(lst, match):
results = []
for idx, item in enumerate(l):
if item == match:
results.append(idx)
return results
print find_indexes(l, 'cabbage')
>>>
[2, 5]