这三个都可以把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进行连接.