Comportamiento inesperado de extensión con una lista en Python

Estoy tratando de entender cómo funciona la extensión en Python y no está haciendo lo que esperaba. Por ejemplo:

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

Pero habría esperado:

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

¿Por qué está devolviendo un Ninguno en lugar de extender la lista?

El método extend() se agrega a la matriz existente y devuelve None . En su caso, está creando una matriz – [4, 5, 6] – sobre la marcha, extendiéndola y luego descartándola. La variable b termina con el valor de retorno de None .

list métodos de list operan en el lugar en su mayor parte y devuelven None .

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

extend extiende su operando, pero no devuelve un valor. Si hubieras hecho:

 b = [4, 5, 6] b.extend(a) 

Entonces obtendrías el resultado esperado.

Otros han señalado muchos métodos de list , particularmente aquellos que mutan la lista, devuelven None lugar de una referencia a la lista. La razón por la que hacen esto es para no confundirse acerca de si se hace una copia de la lista. Si pudiera escribir a = b.extend([4, 5, 6]) , ¿es una referencia a la misma lista que b ? ¿Fue b modificado por la statement? Al devolver None lugar de la lista mutada, dicha statement se vuelve inútil, usted se da cuenta rápidamente de que no tiene lo que pensaba que tenía, y aprende a escribir b.extend(...) lugar. Así se elimina la falta de claridad.

Tuve este problema y mientras que las otras respuestas proporcionan explicaciones correctas, la solución / solución que me gustó no está aquí. El uso del operador de sum concatenará las listas y devolverá el resultado. En mi caso, tenía el color contabilidad como una lista de 3 dígitos y la opacity como un flotador, pero la biblioteca necesitaba el color como una lista de 4 dígitos con la opacidad como el 4º dígito. No quería nombrar una variable desechable, por lo que esta syntax se adaptaba a mis necesidades:

 color = [1, 1, 0] opacity = 0.75 plot.setColor(color + [opacity]) 

Esto crea una nueva lista para la opacidad sobre la marcha y una nueva lista después de la concatenación, pero eso está bien para mis propósitos. Solo quería una syntax compacta para extender una lista con un flotante y devolver la lista resultante sin afectar la lista original o flotante.