首頁 > 後端開發 > Python教學 > 如何在 Python 迭代過程中安全地修改列表中的字串?

如何在 Python 迭代過程中安全地修改列表中的字串?

Mary-Kate Olsen
發布: 2024-12-20 14:46:23
原創
188 人瀏覽過

How Can I Safely Modify Strings Within a List During Iteration in Python?

安全地迭代和修改列表

問題:

通常不建議在 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板