2014-11-05 10 views
6

Immagino che ci sia una soluzione semplice che sto trascurando. Meglio di quello complicato, giusto?La rimozione di un elemento dalla lista fa sì che l'elenco diventi non di tipo

In poche parole:

var = ['p', 's', 'c', 'x', 'd'].remove('d') 

provoca var essere di tipo None. Che cosa sta succedendo qui?

+0

Stai utilizzando '.remove 'errato? Intendi '.pop'? –

+1

No, pop è quello di rimuovere un elemento in un determinato punto della lista, se ricordo. Voglio rimuovere un elemento specifico (come 'd'). –

+0

Come nota a margine, molti usi di 'remove' (e' index' e altri metodi di ricerca elenco) sono segni di un problema con il design. Forse dovresti usare un 'set', o forse hai o dovresti avere l'indice ma non lo stai usando, ecc. Questo non è sicuramente _always_ true, ma vale la pena pensarci. – abarnert

risposta

13

remove non restituisce nulla. Modifica l'elenco esistente sul posto. Non è necessario alcun incarico

Sostituire

var = ['p', 's', 'c', 'x', 'd'].remove('d') 

con

var = ['p', 's', 'c', 'x', 'd'] 
var.remove('d') 

Ora var avrà un valore di ['p', 's', 'c', 'x'].

+0

Sì, è così. Potrei avere la spada ho provato questo. Bene, grazie per la risposta! Segnerà come risposta in 11 minuti quando mi permette di. –

+0

In generale, quasi un qualsiasi metodo che muta l'oggetto in Python restituisce 'None', o almeno qualcosa di diverso da' self'. (Le eccezioni sono per lo più casi speciali, come '__iadd__', o metodi specifici del dominio da framework che hanno i loro idiomi differenti.) – abarnert

+0

In realtà nel mio caso anche che non restituisce nessuno – user32882

1

remove muta l'elenco sul posto e restituisce None. Devi metterlo in una variabile, e quindi cambiare:

>>> var = ['p', 's', 'c', 'x', 'd'] 
>>> var.remove('d') # Notice how it doesn't return anything. 
>>> var 
['p', 's', 'c', 'x'] 
Problemi correlati