Vinnaren i pepparkakshustävlingen!
2011-08-03, 10:11
  #1
Medlem
Om jag har en lista t.ex: lista = [0,1,2,0,4,0] och jag vill kunna ta bort ALLA nollor i listan, hur gör jag?

Har försökt med:

Kod:
for x in lista:
    if x == 0:
        lista.remove(0)


Men då försvinner inte alla nollor. Vad finns det för andra sätt?
Citera
2011-08-03, 10:47
  #2
Medlem
http://stackoverflow.com/questions/1...-a-python-list
Citera
2011-08-03, 10:56
  #3
Medlem
Citat:
Ursprungligen postat av elektrisk
Har försökt med:

Kod:
for x in lista:
    if x == 0:
        lista.remove(0)


Men då försvinner inte alla nollor. Vad finns det för andra sätt?
Det där skulle troligtvis fungera om du inte skriver lista.remove(0). Här är den korreka lösningen:

Kod:
for x in lista:
    if x == 0:
        lista.remove(x)
Citera
2011-08-03, 12:05
  #4
Medlem
Citat:
Ursprungligen postat av Skrynklig
Det där skulle troligtvis fungera om du inte skriver lista.remove(0). Här är den korreka lösningen:

Kod:
for x in lista:
    if x == 0:
        lista.remove(x)

Hmm ok, men nu när jag testade med lite andra värden i listan fick jag igen inte bort alla nollor:


Kod:
lista = [0, 0, 2, 4, 0]

for x in lista:
    if x == 0:
        lista.remove(x)

print(lista)

Då blir det [2,4,0]
Hur kommer det sig?
Citera
2011-08-03, 12:11
  #5
Medlem
Citat:
Ursprungligen postat av torst3n
http://stackoverflow.com/questions/1...-a-python-list

Denna funktion funkade riktigt bra. Jag som googlat som en galning! Tackar.
Citera
2011-08-03, 14:51
  #6
Medlem
Använd med fördel listcomps när du filtrerar. Det är snabbare.

Kod:
lista = [c for c in lista if c != 0]
Citera
2011-08-28, 00:54
  #7
Medlem
Citat:
Ursprungligen postat av Skrynklig
Det där skulle troligtvis fungera om du inte skriver lista.remove(0). Här är den korreka lösningen:

Kod:
for x in lista:
    if x == 0:
        lista.remove(x)

Du tar bort element från den lista du loopar över.
Det kommer att bli oväntade resultat.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback