2013-07-11 43 views
0

我对Python很陌生,正在研究现有的代码库。迭代列表的方法

我看到这种模式的代码位:

for i in range(len(my_list)): 
    item = my_list[i] 
    # process item 

有一个很好的理由,这不应该简化为:

for item in my_list: 
    # process item 

我不需要的项目的索引在for循环内,除了取消引用列表项本身。那么后者有没有问题,我没有看到?

+0

他们都是一样的,但我不明白你为什么要这样做。 'foo'将永远是最后一个元素。后者更清洁 – TerryA

+1

@Haidro我认为我们可以假设循环体中有更多的代码。 – delnan

+0

@Haidro,delnan是正确的。我会在这个问题上更清楚一点。 –

回答

4

有很好的理由将其简化为第二种形式;它是首选的Pythonic方法;但只要使用foo直接:

for foo in my_list: 
    # process item 

如果需要索引以及,使用enumerate()

for i, foo in enumerate(my_list): 
    # process item 

创建for遍历列表len()range()通常是一个标志有人从一种没有for each构造的语言转移到Python,就像C一样,他们还没有习惯Python for循环的真正工作方式。

+0

而我能想到的唯一原因(就是不知道'for blah in'是否可用),是需要循环修改列表,但显然这属于你的'enumerate'示例;) –

+0

@ JonClements:该索引仍然会被关闭,在这种情况下,你必须使用'while'循环。 –

+0

关闭一个吧? –