为什么向列表中添加元素会产生不同的结果?

13
>>> aList = []
>>> aList += 'chicken'
>>> aList
['c', 'h', 'i', 'c', 'k', 'e', 'n']
>>> aList = aList + 'hello'


Traceback (most recent call last):
  File "<pyshell#16>", line 1, in <module>
    aList = aList + 'hello'
TypeError: can only concatenate list (not "str") to list
我不明白为什么执行list += (something)list = list + (something)会导致不同的结果。此外,为什么+=会将字符串拆分为字符插入到列表中?

2
另一个类似的问题https://dev59.com/Hmkw5IYBdhLWcg3wm74h。 - RanRag
@agfпјҡдёҚпјҢйӮЈдёӘй—®йўҳжҳҜе…ідәҺеңЁеҗҢдёҖеҲ—иЎЁдёӯеӯҳеңЁеӨҡдёӘеј•з”Ёж—¶+=дёҺ+зҡ„еҢәеҲ«гҖӮ - Fred Foo
在我看来,它并不完全像是一个重复。 - Ignacio Vazquez-Abrams
3个回答

5

list.__iadd__() 可以接受任何可迭代对象;它会遍历该对象并将每个元素添加到列表中,这将导致将一个字符串拆分为单个字母。 list.__add__() 仅能接受一个列表。


5

aList += 'chicken' 是 Python 中的简写形式,等同于 aList.extend('chicken')a += ba = a + b 的区别在于 Python 会尝试在调用 add 前使用 iadd 来处理 +=。这意味着 alist += foo 可以适用于任何可迭代对象。

>>> a = []
>>> a += 'asf'
>>> a
['a', 's', 'f']
>>> a += (1, 2)
>>> a
['a', 's', 'f', 1, 2]
>>> d = {3:4}
>>> a += d
>>> a
['a', 's', 'f', 1, 2, 3]
>>> a = a + d
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: can only concatenate list (not "dict") to list

1

为了解决你的问题,你需要将列表添加到列表中,而不是将字符串添加到列表中。

尝试这个:

a = []
a += ["chicken"]
a += ["dog"]
a = a + ["cat"]

请注意,它们都按预期工作。


不是作为一个 str 字符串的可迭代对象。 - agf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接