python3:序列的 +,+=,和extend的适用场景以及区别

本文深入探讨了Python中列表合并的方法,包括使用+、+=及extend函数的区别与原理,解析了不同数据类型在合并过程中的行为,并对比了extend与append的功能差异。

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

这三个都可以把list 进行连接,看下边的代码 :

a=[1,2,3]
b=[4,5,6]

c=a+b
print(c)

a+=b

print(a)

打印的结果:

[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6]

大家看看了 应该没有什么区别,都是把列表合并了在一起. 有人说了你不是忽悠吗,不是讲区别吗,怎么没有区别.
同学们看下这个代码,你看看是否有区别.

a=[1,2,3]
b=(4,5,6)

a+=b

print(a)

c=a+b
print(c)

打印结果如下:

[1, 2, 3, 4, 5, 6]

 File "C:/Users/tengfei.wang/PycharmProjects/Testing/testging.py", line 12, in <module>
    c=a+b
TypeError: can only concatenate list (not "tuple") to list

说明说明呢, “+” 前后要数据类型一样,不能list不能加tuple. 这就是区别.
那有的朋友该问了,区别显示了,你能告诉我+=为什么能把不同类型相加呢,能不能告诉我们原理吗,
我听着口气像面试官.
好吧 ,我讲下原理:需要翻开源码才能解释清楚.
跟着我的节奏走,先找到 from _collections_abc import all 的 _collections_abc 模块打开>
找到MutableSequence继续打开>再找到一个魔法函数iadd 如下:

    def __iadd__(self, values):   #+=实际用到的是iadd魔法函数
        self.extend(values)          #这个extend 就是关键
        return self

我们继续打开这个extend 方法.

    def extend(self, values):
        'S.extend(iterable) -- extend sequence by appending elements from the iterable'
        for v in values:
            self.append(v)

看好了,这个extend传的值 要求 是 iterable 可迭代的就行,所以这里做了封装 并且用了for语句
进行循环 append . 小伙伴明白了吧,要想学好语言,必须翻看源代码.
同样extend 也可以这样用.

a=[1,2,3]
b=(4,5,6)

a.extend((9,10))
print(a)
打印结果:
[1, 2, 3, 9, 10]

面试官又来了, 既然你提到了 extend 和append 麻烦你讲下它们两个的区别吧.
我去自己给自己挖坑. 不能说不会呀,继续上代码:

a=[1,2,3]
b=(4,5,6)

a.extend((9,10))
print(a)
a.append(b)
print(a)
打印结果是:
[1, 2, 3, 9, 10]
[1, 2, 3, 9, 10, (4, 5, 6)]

差异显而易见吧,自己可以体会下
总结: +,+=, extend 都是可以把序列进行合并,但是连接的不同类型是不可以用+.
+=和extend 实际原理都一样都是用for循环之后再调用了append 方法.
append 直接连接的是整体不会拆开合并,但是 extend 利用for循环内的append进行连接.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值