我处在一个非常有趣的情况,我很惊讶。
实际上我认为i += 1 and i = i + 1
都是一样的。但它在这里并不相同;
a = [1,2]
a += "ali"
和output is [1,2,"a","l","i"]
但如果我这样写的话;
a = [1,2]
a = a + "ali"
它没有用。
我对此感到很困惑。 他们有什么不同吗?
答案 0 :(得分:4)
+
运算符在+=
运算符扩展带有可迭代的列表时连接列表。
+
运算符连接列表以返回 new 列表...
l1 = l2 = []
l1 = l1 + [1]
l1 # [1]
l2 # []
... +=
运算符通过变异扩展列表。
l1 = l2 = []
l1 += [1]
l1 # [1]
l2 # [1]
允许不同行为的是+
调用__add__
方法而+=
调用__iadd__
方法。
在您的示例中,您为__iadd__
方法提供了一个字符串,这相当于执行l.extend('ali')
。特别是,您可以使用任何可迭代扩展列表,但是连接参数必须都是列表。
虽然list.__iadd__
和list.extend
之间有slight difference。前者返回变异列表,而后者不返回。
答案 1 :(得分:0)
>>> a = [1,2]
>>> a = a + "ali"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "str") to list
对于列表数据类型,请使用.append
方法:
>>> a = [1,2]
>>> a.append("ali")
>>> a
[1, 2, 'ali']
Python中的String被定义为一行中的一系列字符。因此,这些“字符”作为字符添加到“列表”类型,而不是“字符串”。如果要对列表类型使用+=
添加运算符,则必须使用方括号指定添加的变量或值的类型:
>>> a = [1,2]
>>> a += ["ali"]
>>> a
[1, 2, 'ali']
>>> a += ["foo",3,"bar"]
>>> a
[1, 2, 'ali', 'foo', 3, 'bar']