問題:
通常不建議在 Python for 循環期間修改列表。但是,如果您需要修改清單中的字串該怎麼辦?替換這些可變值算是禁止修改嗎?
答案:
只要修改了列表中已經迭代過的元素,就被視為禁止修改可以接受。例如:
a = ['a',' b', 'c ', ' d '] for i, s in enumerate(a): a[i] = s.strip() print(a) # -> ['a', 'b', 'c', 'd']
此程式碼迭代列表 a 並從每個字串中移除空格。它不需要建立新清單並將其分配給原始清單。
但是,在迭代期間更改清單中的項目數量是有風險的。例如:
b = ['a', ' b', 'c ', ' d '] for i, s in enumerate(b): if s.strip() != b[i]: # leading or trailing whitespace? del b[i] print(b) # -> ['a', 'c '] # WRONG!
此程式碼嘗試從清單 b 中刪除具有前導或尾隨空格的元素。不幸的是,它失敗了,因為刪除元素會破壞後續迭代的索引。
注意:
需要注意的是,雖然您可以按照描述安全地修改列表中的元素,任何增加或減少元素數量的嘗試都可能導致錯誤
就地刪除:
如果您想在迭代期間有效刪除條目,請使用列表理解:
b = ['a',' b', 'c ', ' d '] b[:] = [entry for entry in b if entry.strip() == entry] print(b) # -> ['a'] # CORRECT
此程式碼建立一個僅包含沒有前導或尾隨空格的條目的新列表,有效地「就地」刪除不需要的元素。
以上是如何在 Python 迭代過程中安全地修改列表中的字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!