Python中replace()函数的用法

时间:2018-07-17 19:05:30

标签: python

我是python的新手,所以对此了解不多。请帮我喜欢这个:

names = ["Joey Tribbiani", "Monica Geller", "Chandler Bing", "Phoebe Buffay"]
print(names)
for name in names:
    name.lower().replace(' ','_')
print(names)

为什么不更改列表名称中的值。我期望如下:

['joey_tribbiani', 'monica_geller', 'chandler_bing', 'phoebe_buffay']

运行正常:

names = ["Joey Tribbiani", "Monica Geller", "Chandler Bing", "Phoebe Buffay"]
print(names)
names1=[]
for name in names:
    name1=name.lower().replace(' ','_')
    names1.append(name1)
print(names1)

2 个答案:

答案 0 :(得分:0)

摘自string.replace()https://docs.python.org/2/library/string.html#string.replace)的文档:

  

返回字符串s的副本,其中包含所有出现的子字符串old   换成新的...

您需要将此副本存储在某个地方,这就是第二个示例正常工作的原因。

答案 1 :(得分:0)

问题是您要更改从迭代器获取的项目,并且该项目是一个字符串,它是不可更改的对象。当您在字符串上调用方法时,它不会突变(更改),而是返回一个新字符串。

运行for item in items时,您基本上要调用的是items.__iter__(),它等效于iter(items),这将为您提供列表中每个元素的副本。

您有几种解决此问题的替代方法,您提到的一种方法是创建一个新列表并附加修改后的项。另一个解决方案是使用列表理解,这更像Pythonic:

names = [name.lower().replace(' ', '_') for name in names]

您还可以使用索引来替换使用索引的列表中的值,如下所示:

for i, name in enumerate(names):
    names[i] = name.lower().replace(' ','_')