我是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)
答案 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(' ','_')