簡體   English   中英

對在python中遍歷列表感到困惑

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM