0

必须遗漏一些明显的东西,但是为什么这个简单的循环无法修改列表项?

for artist in artists:
    artist = artist.replace(': ', '')

artists = [': Terence Trent D Arby', ": Guns N' Roses", ': Sinead O Connor' ...]
4

3 回答 3

3

循环控制变量只是一个局部变量,引用列表的元素。如果您将该变量重新分配给任何其他对象,它将不再引用列表中的原始对象。因此,将 分配artist给另一个对象,不会使 中的引用list也指向新对象。

要执行您想要的操作,您可以创建一个具有修改值的新列表,并将其分配给原始列表引用。列表推导在这里很有用:

artists = [artist.replace(': ', '') for artist in artists]
于 2013-07-27T16:46:21.867 回答
1

以下语句仅artist用于参考更改值;这不会更改列表值。

artist = artist.replace(': ', '')

尝试以下使用列表理解的代码:

artist = [artist.replace(': ', '') for artist in artists]
于 2013-07-27T16:46:12.053 回答
0

正如 Rohit 所说,艺术家不是对列表项的引用,所以要么按照建议使用列表理解,这是 IMO 最干净的方式,要么像这样“老派”地这样做,只是为了让你理解它是如何做到的在 Rohit 给你的列表理解后面工作:

for index,artist in enumerate(artists):
    artists[index] = artist.replace(': ', '')

但我会这样做:

artists = [artist[2:] for artist in artists]

仅当您列出的所有项目始终以“:”开头时。切片可能比替换更快。

于 2013-07-27T21:22:15.273 回答