我有一个字符串列表,并希望为列表中的每个字符串添加另一个字符串。我认为字符串是可变的,但结果显示相反。这是我的例子:
a = ["abc", "def", "ghi"]
for v in a :
v += "x"
assert a == ["abc", "def", "ghi"]
如果字符串列表是可变的,为什么“x”没有被添加到([“abcx”,“defx”,“ghix”]中的每个元素中?)
答案 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]