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

2024-03-28 23:56:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在Python2.7中替换列表中字符串的一部分,但这不是我所期望的工作方式:

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

我希望输出是:['spamles', 'oranges', 'bananas']。你知道吗

做上述事情的正确方法是什么?我知道我可能可以创建一个新的列表,并将每个项目单独添加到新列表中,但这听起来需要大量的工作,可能需要两倍的内存。你知道吗


Tags: 字符串inapp列表for方式spamitem
3条回答

请注意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']
>>> 

或者,可以使用list comprehensions

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

这将为列表中的每个连续元素创建一个新引用(item)。然后将引用item重新绑定到其他对象,然后将该引用丢弃。你知道吗

I know I can probably make a new list and add each item to the new list individually, but that sounds like a lot of work and might require twice the memory.

过早的优化是。。一些邪恶的东西。可能不是所有的邪恶,而是其中的一部分。你知道吗

但说真的,临时创建一个包含3个(甚至3000个)字符串的列表的内存开销是不值得考虑的。只要列一个新的清单:

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

(不要给列表命名list,它会隐藏内置的)

如果你绝对要改变你的清单:

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

虽然这不会创建一个新的列表(暂时节省内存),但它实际上会比列表理解版本慢,所以“优化”真的没有给你带来任何好处。你知道吗

您只需重新分配给名为item的变量,此时您需要分配给列表项:

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

此代码仅用于演示。真正的解决方案是使用列表理解,就像@karthikr的答案一样。你知道吗

相关问题 更多 >