猿问

连接两个列表 - '+ ='和extend()之间的区别

我已经看到实际上有两种(可能更多)方法在Python中连接列表:一种方法是使用extend()方法:


a = [1, 2]

b = [2, 3]

b.extend(a)

另一个使用加号(+)运算符:


b += a

现在我想知道:这两个选项中的哪一个是“pythonic”方式进行列表连接,两者之间是否存在差异(我查阅了官方Python教程但未找到任何关于此主题的内容)。


手掌心
浏览 691回答 3
3回答

白板的微信

字节码级别的唯一区别在于,这种.extend方式涉及函数调用,这在Python中略高于INPLACE_ADD。除非你执行这项行动数十亿次,否则你应该担心的事情真的没什么。但是,瓶颈可能会出现在其他地方。

人到中年有点甜

您不能将+ =用于非局部变量(对于函数而言不是局部的变量,也不是全局变量)def main():    l = [1, 2, 3]    def foo():        l.extend([4])    def boo():        l += [5]    foo()    print l    boo()  # this will failmain()这是因为对于扩展案例编译器将l使用LOAD_DEREF指令加载变量,但对于+ =它将使用LOAD_FAST- 并且你得到*UnboundLocalError: local variable 'l' referenced before assignment*

MMTTMM

你可以链接函数调用,但你不能直接+ =函数调用:class A:    def __init__(self):        self.listFoo = [1, 2]        self.listBar = [3, 4]    def get_list(self, which):        if which == "Foo":            return self.listFoo        return self.listBara = A()other_list = [5, 6]a.get_list("Foo").extend(other_list)a.get_list("Foo") += other_list  #SyntaxError: can't assign to function call
随时随地看视频慕课网APP

相关分类

Python
我要回答