Como han dicho otros, append
muta la propia lista y no debe asignar a una variable. Ejecutarlo cambia sus datos, actualizando efectivamente a todos los que lo señalan.
Pero, hay un truco que utilizo cuando quiero hacer cosas de una manera funcional *, mientras que la mutación de objetos existentes (en lugar de construir otros nuevos, en este caso utilizando a=[x + ['a'] for x in a]
, o específicamente el x + ['a']
).
lo tanto, si usted es lo suficientemente valiente también puede hacer esto:
>>> a=[[1,2],[3,4],[5,6]]
>>> a=[x.append('a') or x for x in a]
>>> a
[[1, 2, 'a'], [3, 4, 'a'], [5, 6, 'a']]
Esto funciona porque append
vuelve None
, y el or
continúa en la búsqueda de un valor de verdad-y, lo que es x
(es un list
con al menos lo que se adjuntó).
¿Por qué incluso necesito esto?
Digamos que tienes una lista y que desea insertar algunos de sus miembros a una nueva lista, y actualizar las referencias en consecuencia:
Así que tienes la lista all
:
>>> all = [[], [], [], []]
Algunos de que se inserta y se actualiza a una nueva lista x
:
>>> x = [i.append('x') or i for i in all[:2]]
>>> x
[['x'], ['x']]
Algunos de all
también se inserta yu pdated a una lista y
:
>>> y = [i.append('y') or i for i in all[1:3]]
all
se actualiza:
>>> all
[['x'], ['x', 'y'], ['y'], []]
Pero x
también se actualiza: se genera
>>> x
[['x'], ['x', 'y']]
Y y
como se esperaba:
>>> y
[['x', 'y'], ['y']]
En general, para tareas simples, recomiendo usar un bucle for
actualizando de forma explícita. Esto es lo que se considera pitónico.
Técnicamente hablando, si tuviera acceso a la clase de lista, puede hacer esta función:
def more_functional_append(self, x):
self.append(x)
return self
- functional programming se basa en cada declaración que hace esencialmente una cosa, y no tener efectos secundarios (por lo , no mutando y regresando).
append
no es muy funcional ya que muta una lista (la programación funcional pura solo tiene objetos inmutables) y no devuelve un resultado para pasar a otras acciones (funciones). Utilizando conceptos de programación funcional, puede crear ideas geniales que nadie puede leer, también conocidas como "seguridad laboral" o "código incorrecto".
Debe ser a1 = [sublista + ['a'] para la sublista en a]. Observe los corchetes alrededor de 'a'. –
Whoops. Fijo. Gracias. – Oddthinking