[英]confused about looping through lists in python
親愛的StackOverFlow,我剛開始學習python,在遍歷列表時我有些困惑。 我一直在使用Python.org的官方python教程進行學習。 在此頁面的第4.2節https://docs.python.org/2/tutorial/controlflow.html中 ,在最后一個示例中,他們編寫了以下代碼:
for w in words[:]:
if len(w) > 6:
words.insert(0, w)
令我感到困惑的部分是for w in words[:]:
也許我需要更好地閱讀它們的描述,但是我似乎無法弄清楚為什么先前的代碼有效,而這並不能解決: for w in words:
。 我想這使我感到困惑,因為當我在解釋器中鍵入word [:]時,我在解釋器中鍵入單詞時會得到相同的結果。 如果您能對這個話題有所了解,我將不勝感激。
在for
循環中,您正在將元素插入words
列表。 如果直接在words
列表上進行迭代,則插入的元素將影響迭代。 通常,在修改要迭代的列表時,您可能會得到不正確的結果,可能會引發異常,甚至隨着列表的增長,甚至可能出現無限循環,直到內存用完。
在您的特定情況下,如果列表中的任何w
len(w) > 6
,您將得到一個無限循環。 假設您有列表word = ['len(this) == 15']
。 在第一次迭代中,由於len(w) > 6
,它將在words
位置0處插入w
,因此將列表中的所有其他內容向前推進。 因此,現在words
等於['len(this) == 15', 'len(this) == 15']
。 現在, for
循環檢查是否還有下一個元素; 可以肯定的是,因為您只是在位置0插入了一個元素,所以for
循環再次迭代。 當然, w
包含與上一次迭代相同的值,因此發生相同的事情。 超越無限!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.