为什么rstrip不修改字符串列表

时间:2014-04-04 12:19:45

标签: python

为什么rstrip不会修改名为instrumentList的字符串列表

for instrument in instrumentList:
    instrument = instrument.rstrip()

3 个答案:

答案 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)

与列表理解类似,这将创建一个新列表。