replace()函数在Python中的用法

2024-05-15 16:54:59 发布

您现在位置: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)

Tags: nameinfornamesmonicalowerbingprint
2条回答

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

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

有几种方法可以解决这个问题,其中一种方法是创建一个新的列表并附加修改过的项。另一个解决方案是使用一个更具Python意味的列表理解:

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

也可以使用索引替换列表中的值,使用索引的方式如下:

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

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

Return a copy of string s with all occurrences of substring old replaced by new...

您需要将此副本存储在某个地方,这就是第二个示例起作用的原因。你知道吗

相关问题 更多 >