枚举()是什么意思?

2024-04-19 20:04:58 发布

您现在位置:Python中文网/ 问答频道 /正文

for row_number, row in enumerate(cursor):在Python中做什么?

在这种情况下,enumerate是什么意思?


Tags: innumberfor情况cursorrowenumerate
3条回答

它是一个内置函数,返回一个可以迭代的对象,请参见http://docs.python.org/2/library/functions.html#enumerate

简言之,它循环遍历iterable的元素(如列表)以及组合在元组中的索引号:

for item in enumerate(["a", "b", "c"]):
    print item

印刷品

(0, "a")
(1, "b")
(2, "c")

如果您想循环一个序列(或其他可迭代的东西),并且还想有一个可用的索引计数器,这将很有帮助。如果希望计数器从其他值(通常为1)开始,可以将其作为enumerate的第二个参数。

^{} function向iterable添加一个计数器。

因此,对于cursor中的每个元素,都会产生一个具有(counter, element)的元组;for循环将其分别绑定到row_numberrow

演示:

>>> 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

默认情况下,enumerate()0开始计数,但是如果给它第二个整数参数,它将从该数字开始:

>>> for count, elem in enumerate(elements, 42):
...     print count, elem
... 
42 foo
43 bar
44 baz

如果要在Python中重新实现enumerate(),这里有两种实现方法:一种是使用^{}进行计数,另一种是在generator function中手动计数:

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)

以及

def enumerate(it, start=0):
    count = start
    for elem in it:
        yield (count, elem)
        count += 1

actual implementation in C更接近后者,优化后的方法是对公共的for i, ...解包情况重用一个元组对象,并对计数器使用标准的C整数值,直到计数器变得太大而无法避免使用Python整数对象(它是无边界的)。

我正在读一本Brett Slatkin写的书('Effective Python'),他展示了另一种遍历列表的方法,还知道列表中当前项的索引。 但建议不要使用它,而是使用enumerate。 我知道你问枚举是什么意思,但是当我理解了下面的内容时,我也理解了enumerate如何使遍历列表的同时知道当前项的索引更容易(而且更可读)。

list_of_letters = ['a', 'b', 'c']
for i in range(len(list_of_letters)):
    letter = list_of_letters[i]
    print (i, letter)

输出为:

0 a
1 b
2 c

在我读到enumerate函数之前,我也做过一些事情,甚至更愚蠢。

i = 0
for n in list_of_letters:
    print (i, n)
    i = i +1

它产生相同的输出。

但是有了enumerate我只需要写:

list_of_letters = ['a', 'b', 'c']
for i, letter in enumerate(list_of_letters):
    print (i, letter)

相关问题 更多 >