为什么rstrip不会修改名为instrumentList的字符串列表
for instrument in instrumentList:
instrument = instrument.rstrip()
答案 0 :(得分:4)
在Python中,str
是不可变的;你无法更改它。您可以使用id
(相同id
表示相同的对象)来查看此内容:
>>> instrument = "guitar "
>>> id(instrument)
50103936
>>> instrument = instrument.strip()
>>> id(instrument)
49968576 # different object
rstrip
会返回新str
对象,将其分配给instrument
并不会更改{{1}引用的对象列表在...中该列表仍引用旧对象:
instrument
列表是可变的,所以如果你有一个对象列表,你可以就地改变它,即不创建新对象,例如通过添加一个新项目:
>>> instruments = ["guitar "]
>>> id(instruments[0])
50103968
>>> instrument = instruments[0]
>>> instrument = instrument.rstrip()
>>> id(instrument)
49968576 # different object
>>> id(instruments[0])
50103968 # still the same in list
或(这是您想要做的),更改特定索引引用的对象:
>>> instruments = ["guitar"]
>>> id(instruments)
50116048
>>> instruments.append("piano")
>>> instruments
['guitar', 'piano'] # more items
>>> id(instruments)
50116048 # same object
虽然ramcdougal的列表理解肯定更整洁。
答案 1 :(得分:3)
您正在重新定义本地instrument
,而不是更改列表中的值。
尝试:
instrumentList = [instrument.rstrip() for instrument in instrumentList]
答案 2 :(得分:0)
jonrsharpe的回答非常好,我只是想用map
指出另一种简洁的方法:
from string import rstrip
instruments_stripped = map(rstrip, instruments)
与列表理解类似,这将创建一个新列表。