• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z usuwaniem elementów z listy w Python

Fiszki IT
Fiszki IT
0 głosów
25 wizyt
pytanie zadane 3 dni temu w Python przez Gowi Użytkownik (760 p.)

Cześć,

przy testowaniu pętli for i usuwaniu z jej pomocą liczb parzystych z listy napotkałem na problem, który nie bardzo wiem jak rozwiązać.

thislist = [1,2,2,3,4]

for n in thislist:
    if n % 2 == 0:
        thislist.remove(n)
        print(n)
        print(thislist)

Wynik:

2
[1, 2, 3, 4]
4
[1, 2, 3]

Problem polega na tym, że usuwa liczby 2 i 4 z pominięciem jednej "dwójki". Natomiast samo działanie pętli for bez usuwania z listy wygląda tak:

thislist = [1,2,2,3,4]

for n in thislist:
    if n % 2 == 0:
        print(n)

Wynik:

2
2
4

1 odpowiedź

+1 głos
odpowiedź 3 dni temu przez adrian17 Ekspert (297,380 p.)

Ogólnie modyfikowanie listy podczas iteracji to jest zazwyczaj zły pomysł. W Twoim przypadku remove() powoduje, że iteracja "przeskoczy" jeden element.

Działającym ale brzydkim rozwiązaniem jest iterowanie po kopii listy (wtedy nie jest modyfikowana):

for n in list(thislist):
    if n % 2 == 0:
        thislist.remove(n)

Ale znacznie lepszym rozwiązaniem, w tym algorytmicznie, jest użycie list comprehension:

thislist = [n for n in thislist if n % 2 != 0]

 

komentarz 3 dni temu przez Gowi Użytkownik (760 p.)
Dzięki wielkie Adrian, zwłaszcza za tę drugą opcję "list comprehension", której nie znałem, ale nazwa mi się obiła o uszy. Chyba bardziej zainteresuję się tym tematem

Podobne pytania

0 głosów
1 odpowiedź 673 wizyt
0 głosów
3 odpowiedzi 155 wizyt
pytanie zadane 19 lutego 2017 w C i C++ przez beniek_01 Nowicjusz (140 p.)
+1 głos
2 odpowiedzi 96 wizyt
pytanie zadane 27 lutego w JavaScript przez Darth Vader Początkujący (250 p.)
Porady nie od parady
Publikując kody źródłowe korzystaj ze specjalnego bloczku koloryzującego składnię (przycisk z napisem code w edytorze). Nie zapomnij o ustawieniu odpowiedniego języka z rozwijanego menu oraz czytelnym formatowaniu kodu.Przycisk code

84,706 zapytań

133,512 odpowiedzi

295,905 komentarzy

55,988 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...