可以+ =通过添加字符串来更改可变列表吗?

时间:2017-10-12 18:48:43

标签: python-3.x

我有一个字符串列表,并希望为列表中的每个字符串添加另一个字符串。我认为字符串是可变的,但结果显示相反。这是我的例子:

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

如果字符串列表是可变的,为什么“x”没有被添加到([“abcx”,“defx”,“ghix”]中的每个元素中?)

1 个答案:

答案 0 :(得分:2)

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

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

尽管有+=运算符,但由于字符串是不可变的,v的引用会发生变化(附加x的值会丢失)。

你可以这样做:

for i in range(len(a)):
    a[i] += "x"

但循环使用非常单一的索引。只有当您需要修改一些值(索引的“随机”访问)时才有意义。为a列表“就地”工作。

您可以使用列表理解重建列表,这将是最pythonic方式(将替换 a,而不是修改它):

a = [i+"x" for i in a]