Concatenación de dos listas: diferencia entre '+=' y extend()

Resuelto helpermethod asked hace 14 años • 12 respuestas

He visto que en realidad hay dos (tal vez más) formas de concatenar listas en Python:

Una forma es utilizar el extend()método:

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

el otro para usar el operador más (+):

b += a

Ahora me pregunto: ¿cuál de esas dos opciones es la forma 'pitónica' de realizar la concatenación de listas y hay alguna diferencia entre las dos? (Busqué el tutorial oficial de Python pero no pude encontrar nada sobre este tema).

helpermethod avatar Sep 07 '10 00:09 helpermethod
Aceptado

La única diferencia a nivel de código de bytes es que la .extendforma implica una llamada a una función, que es un poco más cara en Python que INPLACE_ADD.

Realmente no es nada de lo que deba preocuparse, a menos que realice esta operación miles de millones de veces. Sin embargo, es probable que el cuello de botella esté en otro lugar.

SilentGhost avatar Sep 06 '2010 17:09 SilentGhost

No puede usar += para variables no locales (variable que no es local para la función y tampoco es global)

def main():
    l = [1, 2, 3]

    def foo():
        l.extend([4])

    def boo():
        l += [5]

    foo()
    print l
    boo()  # this will fail

main()

Es porque, para casos extendidos , el compilador cargará la variable lusando LOAD_DEREFla instrucción, pero para += usará LOAD_FAST- y obtendrá*UnboundLocalError: local variable 'l' referenced before assignment*

monitorius avatar Jun 17 '2014 10:06 monitorius

Puede encadenar llamadas a funciones, pero no puede += una llamada a función directamente:

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.listBar

a = 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
isarandi avatar Jun 11 '2016 10:06 isarandi