通过内容和索引循环列表

我通过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的方式来做到这一点?

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

使用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) 

像其他人一样:

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

而且

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

换句话说,如果您不希望索引以默认值0开始,您可以指定由enumerate()生成的索引/计数的起始值

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

enumerate是你想要的:

 for i, s in enumerate(S): print s, i 
 >>> for i, s in enumerate(S): 

enumerate()使这个更漂亮:

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

看到这里更多。