[python] problem z instrukcją del


(wojmal) #1

Witajcie!

Chcę napisać program, który z listy usunie elementy ujemne (mój pierwszy program w pythonie). Utworzyłem coś takiego:

lista =[1,6,7,8,9,12,34,-45,-89,32,45,-9,-6,-2,-45,-56,-32,6,7,8,9,33,44,55,66,77,-6,5] 
#lista zawierające liczby dodatnie i ujemne

for liczba in range(len(lista)):
    if lista[liczba]<0:
        del lista[liczba]

for wynik in lista:
    print(wynik)

ale pojawia się błąd, ponieważ wyrzucając elementy, skracam zakres, więc pętla for wychodzi poza niego. Jak można to poprawić?


(Fiołek) #2

Jeśli chce się iterować po tablicy i usuwać z niej elementy w trakcie, to warto to zrobić "od tyłu" - nie trzeba modyfikować indeksera w trakcie działania programu. Dodatkowo, listy w Pythonie indeksowane są od zera, więc maksymalny indeks to len(lista)-1 .

 

Nie znam Pythona, ale taka szybka modyfikacja działa - http://ideone.com/FPmq81 .


(wojmal) #3

Super dzięki. No tak, nie pomyślałem o tym, aby pojechać od końca. No i taki błąd z tym len(lista)-1. Jeszcze raz dzięki.