2014-11-05 14 views
6

Wyobrażam sobie, że istnieje proste rozwiązanie, które przeoczyłem. Lepsze to niż skomplikowane, prawda?Usunięcie pozycji z listy powoduje, że lista staje się nieokreślona.

Upraszczając:

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

powoduje var być typu None. Co tu się dzieje?

+0

Używasz ".remove" źle? Czy masz na myśli '.pop'? –

+1

Nie, pop jest usunięcie elementu w określonym miejscu na liście, jeśli sobie przypomnę. Chcę usunąć określony element (taki jak "d"). –

+0

Na marginesie, wiele zastosowań metody 'remove' (i' index' oraz innych metod wyszukiwania list) jest oznaką problemu z projektem. Może powinieneś używać 'set', a może masz lub powinieneś mieć indeks, ale go nie używasz, itd. To zdecydowanie nie jest prawdą, ale warto o tym pomyśleć. – abarnert

Odpowiedz

13

remove nic nie zwraca. Modyfikuje istniejącą listę w miejscu. Żadne zadanie nie jest potrzebne.

Wymień

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

z

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

Teraz var będzie mieć wartość ['p', 's', 'c', 'x'].

+0

Tak, to robi. Mógłbym mieć miecz, próbowałem tego. No cóż, dziękuję za odpowiedź! Oznaczy jako odpowiedź w ciągu 11 minut, kiedy pozwoli mi to zrobić. –

+0

Ogólnie rzecz biorąc, prawie _any_ metoda, która mutuje obiekt w Pythonie, zwraca 'None' lub przynajmniej coś innego niż' self'. (Wyjątkami są w większości przypadków specjalne, takie jak '__iadd__' lub specyficzne dla domeny metody z frameworków, które mają swoje własne idiomy.) – abarnert

+0

Właściwie w moim przypadku nawet to nie zwraca żadnej wartości – user32882

1

remove mutuje listę w miejscu i zwraca None. Musisz umieścić go w zmiennej, a następnie zmienić:

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