Python序列添加元素方法中+,+=,extend()和append()的区别

本文探讨Python中可变序列列表的元素添加方法,包括`+`、`+=`、`extend()`和`append()`的区别。`+`和`+=`操作会创建新列表,而`extend()`和`append()`直接在原列表上进行修改。`extend()`接收可迭代对象并逐个添加元素,`append()`则直接将整个对象作为单个元素添加。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python的序列类型中,只有可变序列可以添加元素。这里以列表为例。

a = [1, 2, 3]

使用 + 情况:

a + [4,5]
> [1, 2, 3, 4, 5]

b = a + [4,5]

b
> [1, 2, 3, 4, 5]

a 
> [1, 2, 3]

使用 += 情况:

a += [6,7]

a
>[1, 2, 3, 6, 7]
  • 从代码中,可以看到使用 + 是会返回一个值的 ,然后赋值给了 b 。而 += 不会返回值,既是说是直接在a的身上添加了元素,所以 += 后,a的元素就是 [1,2,3,4,5] 了。而使用 + 后,a还是原本的值。

  • 还有一个很重要的区别,就是 + 后面只能跟与a 同类型 的元素,这里a是一个列表,所以只能加上同为列表元素。而+= 后面只要是 可迭代对象 就可以了。

a + (8,9)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-31-20fd0af32564> in <module>()
----> 1 a + (8,9)

TypeError: can only concatenate list (not "tuple") to list


a += (8,9)
a
[1, 2, 3, 6, 7, 8, 9]

a += range(3)
a
[1, 2, 3, 6, 7, 8, 9, 0, 1, 2, 0, 1, 2]

所以如果我们定义一个可迭代对象,也是可以使用 += 来使用的。

class Animal:
    def __init__(self, animal_list):
        self.animal = animal_list

    def __getitem__(self, item):
        return self.animal[item]

animal = Animal(['dog', 'pig', 'cat'])

这里定义了一个可迭代的对象 animal

a += animal
a
> [1, 2, 3, 6, 7, 8, 9, 0, 1, 2, 0, 1, 2, 'dog', 'pig', 'cat']

使用 extend() 情况:与使用+= 的情况类似,也是在对象的身上直接添加元素,而且也只要满足是可迭代对象 即可。

b = [1,2]
b.extend((3,4))

b
> [1, 2, 3, 4]

b.extend(animal)
b
> [1, 2, 3, 4, 'dog', 'pig', 'cat']

而使用 append() 虽然也是在元素本身添加元素,但有点不一样:

c = [1,2]
c.append([3,4])
c
> [1, 2, [3, 4]]

c.append((5,6))
c
> [1, 2, [3, 4], (5, 6)]

c.append(animal)
c
> [1, 2, [3, 4], (5, 6), <__main__.Animal at 0x1e8bb265c50>]

append() 是直接将参数当作一个元素添加进入了,既是参数是一个可迭代对象。

  • 其实 +=extend()append() 三种方法存在着调用关系。 += 会让解释器调用 __iadd__() 魔法方法,而__iadd__() 会调用 extend() 方法,即 a.extend(iterable),而extend() 方法中存在 for...in... 来迭代可迭代对象,将迭代出的元素放进append() 中:
a = [1, 2]
a += (4,5)
   ||
a.__iadd__((4,5))
   ||
def extend(iterable):
    for iter im iterable:
        a.append(iter)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值