簡體   English   中英

如何替換列表中的部分字符串?

[英]How can I replace parts of strings in a list?

我想在python 2.7中替換列表中字符串的一部分,但這不能按我期望的方式工作:

>>> list = ['apples', 'oranges', 'bananas']
>>> for item in list: 
...  item=item.replace('app', 'spam') 
... 
>>> list
['apples', 'oranges', 'bananas']

我希望輸出為: ['spamles', 'oranges', 'bananas']

做上述事情的正確方法是什么? 我知道我可能可以制作一個新列表並將每個項目分別添加到新列表中,但這聽起來像是很多工作,並且可能需要兩倍的內存。

請注意list不是一個好的本地變量名稱。

您的代碼無法正常工作的原因是,您沒有在循環中替換相應的元素,只是將其分配給了局部變量。

嘗試這個:

x = ['apples', 'oranges', 'bananas']
for i, item in enumerate(x): 
    item=item.replace('app', 'spam') 
    x[i] = item
    #Or just 
    #x[i] = item.replace('app', 'spam') 

演示:

>>> x = ['apples', 'oranges', 'bananas']
>>> for i, item in enumerate(x): 
...     item=item.replace('app', 'spam') 
...     x[i] = item
... 
>>> x
['spamles', 'oranges', 'bananas']
>>> 

另外,您可以使用列表推導

>>> x =  ['apples', 'oranges', 'bananas']
>>> x = [a.replace("app", "spam") for a in x ]
>>> x
['spamles', 'oranges', 'bananas']
>>> 
for item in list: 

這將為列表中的每個后續元素創建一個新引用( item )。 然后,您將參考item重新綁定到其他item ,然后將其扔掉。

我知道我可能可以制作一個新列表並將每個項目分別添加到新列表中,但這聽起來像是很多工作,並且可能需要兩倍的內存。

過早的優化是...邪惡的根源。 可能不是所有的邪惡,而是其中的一部分。

但是,嚴重的是,暫時創建3個(甚至3000個)字符串列表的內存開銷不值得考慮。 只需列出一個新清單:

li = ['apples', 'oranges', 'bananas']
li = [x.replace('app','spam') for x in li]
#li = ['spamles', 'oranges', 'bananas']

(不要命名您的列表list ,它會隱藏內置list

如果絕對的話,肯定需要就地更改列表:

for i,x in enumerate(li):
    li[i] = x.replace('app','spam')

盡管這不會創建一個新列表(暫時節省內存),但實際上它會比列表理解版本要慢,因此“優化”實際上並沒有幫助您。

當您想要分配給列表item ,只需將其重新分配給名為item的變量:

for i, item in enumerate(list):
    list[i] = item.replace('app', 'spam') 

此代碼僅用於演示。 真正的解決方案是使用列表推導,就像@karthikr的答案一樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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