有关python

时间:2018-05-23 19:43:55

标签: python list operation

我处在一个非常有趣的情况,我很惊讶。 实际上我认为i += 1 and i = i + 1都是一样的。但它在这里并不相同;

a = [1,2]
a += "ali"

output is [1,2,"a","l","i"]

但如果我这样写的话;

a = [1,2]
a = a + "ali"

它没有用。

我对此感到很困惑。 他们有什么不同吗?

2 个答案:

答案 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']