必须遗漏一些明显的东西,但是为什么这个简单的循环无法修改列表项?
for artist in artists:
artist = artist.replace(': ', '')
artists = [': Terence Trent D Arby', ": Guns N' Roses", ': Sinead O Connor' ...]
循环控制变量只是一个局部变量,引用列表的元素。如果您将该变量重新分配给任何其他对象,它将不再引用列表中的原始对象。因此,将 分配artist
给另一个对象,不会使 中的引用list
也指向新对象。
要执行您想要的操作,您可以创建一个具有修改值的新列表,并将其分配给原始列表引用。列表推导在这里很有用:
artists = [artist.replace(': ', '') for artist in artists]
以下语句仅artist
用于参考更改值;这不会更改列表值。
artist = artist.replace(': ', '')
尝试以下使用列表理解的代码:
artist = [artist.replace(': ', '') for artist in artists]
正如 Rohit 所说,艺术家不是对列表项的引用,所以要么按照建议使用列表理解,这是 IMO 最干净的方式,要么像这样“老派”地这样做,只是为了让你理解它是如何做到的在 Rohit 给你的列表理解后面工作:
for index,artist in enumerate(artists):
artists[index] = artist.replace(': ', '')
但我会这样做:
artists = [artist[2:] for artist in artists]
仅当您列出的所有项目始终以“:”开头时。切片可能比替换更快。