我得到了列表和集合串联的有线情况。 例如,我有一个列表并设置
l = [1, 2, 3]
s = {1, 2, 3, 4, 5}
当我运行代码时:
l + s
我有错误(预计会发生)
TypeError:只能将列表(不是“set”)连接到列表
但是当我使用+=
时,我得到了结果
l += s # [1, 2, 3, 1, 2, 3, 4, 5]
我知道存在差异。在第一种情况下,我称之为方法operator.add(l, s)
,而在第二种情况下,我称之为l.__iadd__(s)
。
但有人可以解释为什么有两个不同的结果?为什么__iadd__
更改了类型但add()
引发了异常?
更新
@Jon Clements关于list.extend
是正确的。并从documentation
list.extend(L)
通过附加给定列表中的所有项来扩展列表。相当于[len(a):] = L。
最后l[len(s):] = s
就像一个魅力