我有一个字符串列表,并希望向列表中的每个字符串添加另一个字符串。我认为这个字符串是可变的,但结果却显示出相反的结果。这是我的例子:Can + =可以通过添加一个字符串来改变可变列表吗?
a = ["abc", "def", "ghi"]
for v in a :
v += "x"
assert a == ["abc", "def", "ghi"]
如果字符串列表是可变的,为什么是“X”不被添加到每个元素在([“ABCX”,“defx”,“折扣低价”])?
我有一个字符串列表,并希望向列表中的每个字符串添加另一个字符串。我认为这个字符串是可变的,但结果却显示出相反的结果。这是我的例子:Can + =可以通过添加一个字符串来改变可变列表吗?
a = ["abc", "def", "ghi"]
for v in a :
v += "x"
assert a == ["abc", "def", "ghi"]
如果字符串列表是可变的,为什么是“X”不被添加到每个元素在([“ABCX”,“defx”,“折扣低价”])?
该列表是可变的,但其中的字符串不是。所以,当你这样做:
a = ["abc", "def", "ghi"]
for v in a :
v += "x"
尽管+=
操作,因为字符串是不可变的v
变化参考(并与X附加的值丢失)。
你可以这样做:
for i in range(len(a)):
a[i] += "x"
,但循环对非常unpythonic索引。只有当你需要修改一些值(通过索引“随机”访问)时才有意思。适用于a
列表的“in-place”。
你可以使用列表中理解重建的名单,这将是最Python的方式(将取代a
,而不是对其进行修改):
a = [i+"x" for i in a]
列表是可变的,但字符串不是。 –
@ Jean-Francois Fabre谢谢你的提示。那么为什么列表综合应用在字符串上,字符串可以改变? –
字符串不能改变,但你可以扔掉你的列表的旧版本,并得到一个新的与你想要的内容 –