109

循环遍历 python 列表以获取内容及其索引是很常见。我通常做的事情如下:

S = [1,30,20,30,2] # My list
for s, i in zip(S, range(len(S))):
    # Do stuff with the content s and the index i

我觉得这种语法有点难看,尤其是zip函数内部的部分。有没有更优雅/Pythonic 的方式来做到这一点?

4

6 回答 6

191

使用enumerate()

>>> S = [1,30,20,30,2]
>>> for index, elem in enumerate(S):
        print(index, elem)

(0, 1)
(1, 30)
(2, 20)
(3, 30)
(4, 2)
于 2012-07-13T17:56:04.453 回答
69

使用enumerate内置函数:http ://docs.python.org/library/functions.html#enumerate

于 2012-07-13T17:55:34.867 回答
25

像其他人一样:

for i, val in enumerate(data):
    print i, val

for i, val in enumerate(data, 1):
    print i, val

换句话说,您可以将enumerate()生成的索引/计数指定为起始值,如果您不希望索引以默认值 zero开始,它会派上用场。

前几天我正在打印文件中的行并将起始值指定为 1 enumerate(),这在向用户显示有关特定行的信息时比 0 更有意义。

于 2012-07-13T18:00:12.543 回答
6

enumerate是你想要的:

for i, s in enumerate(S):
    print s, i
于 2012-07-13T17:56:22.593 回答
4
>>> for i, s in enumerate(S):
于 2012-07-13T17:56:26.223 回答
4

enumerate()使这个更漂亮:

for index, value in enumerate(S):
    print index, value

请参阅此处了解更多信息。

于 2012-07-13T17:56:42.410 回答