Python: Entfernen die negative aus einer Liste von zahlen

Die Frage, ist das entfernen von negativen zahlen.

Wenn remove_negs([1, 2, 3, -3, 6, -1, -3, 1]) ausgeführt wird, das Ergebnis ist: [1, 2, 3, 6, -3, 1]. Das Ergebnis ist wohl [1, 2, 3, 6, 3, 1]. was geschieht, ist, dass, wenn es zwei negative zahlen in einer Zeile (z.B.-1, -3), dann die zweite Zahl wird nicht entfernt.
def main():
Zahl = input("Geben Sie eine Liste von zahlen: ")
remove_negs(zahlen)

def remove_negs(num_list): 
  '''Remove the negative numbers from the list num_list.'''
    for item in num_list: 
        if item < 0: 
           num_list.remove(item) 

    print num_list

main()
Klingt wie ein guter job für eine Liste Verständnis, welche Prüfungen für val >= 0.
Nicht entfernen Sie Elemente aus einer Liste Sie sind iteriert wie ändert sich der index der Elemente und man konnte am Ende überspringt einige der Elemente.
Wie andere gesagt haben, nicht ändern Sie den Inhalt des Daten-Containers während der Iteration durch. Iterieren über eine Kopie - for item in Liste(num_list):
Auch, sollten Sie nicht nennen remove um ein Element zu löschen, wenn Sie bereits wissen, wo es ist. Dies ist (a) möglicherweise falsch, weil remove löscht das erste Element, das gleich item werden, die möglicherweise nicht die, die Sie wollen, und (b) langsamer, weil es heißt, Sie Suche die ganze Liste, das Element zu finden, obwohl Sie bereits wusste, wo es war. del num_list[index] ist immer besser. Aber wie Sie wissen, der index? Einfach: for index, item in enumerate(num_list):. (Dies ist alles eine Randnotiz; es wird nicht die Lösung Ihres eigentlichen Problems... aber es sind schon gute Antworten und Kommentare.)

InformationsquelleAutor user3161743 | 2014-01-06

Schreibe einen Kommentar