Come altri hanno detto, append
muta la lista stessa e non è necessario assegnare a una variabile. Eseguirlo cambia i suoi dati, aggiornando in modo efficace tutti quelli che lo indicano.
Ma, c'è un trucco che uso quando voglio fare cose in modo funzionale * mentre mutando oggetti esistenti (piuttosto che costruire quelli nuovi, in questo caso utilizzando a=[x + ['a'] for x in a]
, o specificamente il x + ['a']
).
Quindi, se siete abbastanza coraggiosi si può anche fare questo:
>>> 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']]
Questo funziona perché append
rendimenti None
, e il or
continua a cercare un valore di verità-y, che x
è (è un list
con almeno quello che è stato aggiunto ad esso).
Perché ho bisogno anche di questo?
Diciamo che avete una lista e si desidera inserire alcuni dei suoi membri ad una nuova lista, e aggiornare i riferimenti di conseguenza:
Così si ha la lista all
:
>>> all = [[], [], [], []]
Alcuni di è inserito e aggiornato per un nuovo elenco x
:
>>> x = [i.append('x') or i for i in all[:2]]
>>> x
[['x'], ['x']]
Alcuni di all
è anche inserito e u pdated a un elenco y
:
>>> y = [i.append('y') or i for i in all[1:3]]
all
è aggiornato:
>>> all
[['x'], ['x', 'y'], ['y'], []]
Ma x
è anche aggiornato:
>>> x
[['x'], ['x', 'y']]
E y
è generato come previsto:
>>> y
[['x', 'y'], ['y']]
Nel complesso, per compiti semplici, consiglierei di utilizzare un ciclo for
aggiornando esplicitamente. Questo è ciò che è considerato pitonico.
Tecnicamente parlando, se si ha l'accesso alla classe lista, si potrebbe fare questo una funzione:
def more_functional_append(self, x):
self.append(x)
return self
- functional programming si basa su ogni affermazione facendo essenzialmente una cosa, e non avere effetti collaterali (in modo , non mutando e ritornando).
append
non è molto funzionale poiché muta una lista (la pura programmazione funzionale ha solo oggetti immutabili) e non restituisce un risultato da passare ad altre azioni (funzioni). Utilizzando concetti di programmazione funzionale è possibile creare grandi one-liner di grandi dimensioni che nessuno può leggere, noto anche come "sicurezza del lavoro" o "codice errato".
Che dovrebbe essere a1 = [sottolista + ['a'] per sottolista in a]. Appuntare le parentesi attorno a 'a'. –
Whoops. Fisso. Grazie. – Oddthinking