2017-10-12 73 views
-3

我有一个字符串列表,并希望向列表中的每个字符串添加另一个字符串。我认为这个字符串是可变的,但结果却显示出相反的结果。这是我的例子:Can + =可以通过添加一个字符串来改变可变列表吗?

a = ["abc", "def", "ghi"] 
for v in a : 
    v += "x" 
assert a == ["abc", "def", "ghi"] 

如果字符串列表是可变的,为什么是“X”不被添加到每个元素在([“ABCX”,“defx”,“折扣低价”])?

+3

列表是可变的,但字符串不是。 –

+0

@ Jean-Francois Fabre谢谢你的提示。那么为什么列表综合应用在字符串上,字符串可以改变? –

+0

字符串不能改变,但你可以扔掉你的列表的旧版本,并得到一个新的与你想要的内容 –

回答

2

该列表是可变的,但其中的字符串不是。所以,当你这样做:

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] 
+0

做什么是简单明显的pythonic。当你只需要改变一个元素时重建整个列表 - 这太愚蠢了。 – trentcl

+0

请注意,所有元素都在这里变异,而不仅仅是一个。否则我同意。 –

+0

够公平的。我可能已经变得对这个网站上列表解析的无端使用过于敏感。 – trentcl

相关问题