2013-07-11 64 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

關閉一個吧? –