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
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 Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist generell eine schlechte Idee, zum entfernen von Elementen aus einer Liste während der Iteration über (siehe der link in meinem Kommentar um eine Erklärung, warum dies so ist). Ein besserer Ansatz wäre die Verwendung einer list comprehension:
Beachten Sie, dass die obige Zeile erzeugt ein neue Liste und weist
num_list
. Sie können auch ein "in-place" Zuordnung der formdie nicht eine neue Liste erstellen, in der Erinnerung, sondern ändert den Speicherort bereits gezeigt, durch
num_list
. Dieser Unterschied wird im detail erläutert hier.num_list
hier, so der original-version (ohne die slice-Zuweisung) war wohl in Ordnung. Vielleicht wäre es sogar besser zu zeigen und erklären Sie den Unterschied?Ja, vielleicht haben Sie Recht. Ich werde Bearbeiten, um zu erklären den Unterschied.
Sie sagte: "Das Ergebnis ist wohl
[1, 2, 3, 6, 3, 1]
." Das ist genau das, was arshajii code produziert. Wenn Sie Tat es so, wie Sie sind, behaupten zu wollen, das Ergebnis wäre[1, 2, 3, 3, 6, 1, 3, 1]
.InformationsquelleAutor arshajii
Viel einfacher:
Wenn Sie wirklich wollen, um eine Schleife, versuchen Sie dies:
Das tut, was Sie wollen:
Der Schlüssel ist, dass die abtretungserklärung
r = num_list[:]
macht eine Kopie von num_list. Um nicht zu verwechseln Sie die Schleife, die Wir dann entfernen Sie Elemente ausr
anstatt aus der Liste, die wir sind, Durchlaufen.Mehr: Python ' s Behandlung von Variablen ist ein bisschen subtiler. Python hält, variable Namen, wie
r
odernum_list
getrennt von den Variablen Daten, wie[1, 2, 3, 6, 1]
. Die Namen sind lediglich Zeiger auf die Daten. Betrachten Sie die Zuweisungsanweisung:Nachdem diese Anweisung ausgeführt,
r
undnum_list
beide auf die gleichen Daten verweisen. Wenn Sie eine änderung vornehmen, umr
's-Daten, Sie sind auch eine änderungnum_list
's die Daten, da Sie beide auf das gleichen Daten. Betrachten Sie jetzt:Diese Aussage sagt python zu ändern
num_list
's-Daten, indem Sie nur bestimmte Elemente davon. Weil dieses, python macht eine Kopie vonnum_list
's Daten. Es passiert einfach so, dass[:]
gibt an, dass wir wollen, dass allenum_list
's-Daten unverändert, aber das bedeutet nicht aufhören python Kopie. Die Kopie zugeordnet istr
. Dies bedeutet, dassr
undmum_list
jetzt zu verschiedenen Daten. Wir können änderungen machen, umr
's Daten, und es hat keinen Einfluss aufnum_list
's-Daten, weil Sie verschiedenen Daten.Wenn dies neu für Sie, möchten Sie vielleicht Blick auf dieses tutorial zu python-Ansatz auf Variablen-Namen und Variablen-Daten: Grundlegendes zu Python-Variablen und Speicher-Management
Beispiele:
Kontrast:
Gute Frage. Siehe aktualisierte Antwort.
InformationsquelleAutor John1024
Andere Lösung
InformationsquelleAutor sergiohzlz
Aus einem Kommentar auf arshajii Antwort:
Entfernen der negativen zahlen ist genau das, was Ihr code ist ganz klar versuchen zu tun, und es ist auch der einzige Weg, um das gewünschte Ergebnis zu erhalten:
Aber wenn Sie wirklich wollen, um "das negative Zeichen" von den zahlen, das ist noch einfacher. Zum Beispiel entfernen Sie das negative Vorzeichen von
-3
Sie einfach negieren und bekommen3
, richtig? Sie können dies tun, in-place, wie Sie in den existierenden code:... oder in einer Liste Verständnis, wie in arshajii:
Und es ist sogar einfacher, mit der
abs
- Funktion, die macht genau das—negiert negative zahlen, Blätter, positiven und null-allein:Entweder Weg ist natürlich, dies wird Ihnen
[1, 2, 3, 3, 6, 1, 3, 1]
, das ist die falsche Antwort... aber wenn dein Kommentar richtig ist, es ist die Antwort, die Sie gefragt haben.InformationsquelleAutor abarnert
Andere die die herkömmlichen
variable operator non-variable
Versuchen, einige yoda conditions auch =)InformationsquelleAutor alvas
strip-Nummern aus Ihren negativen Zeichen, das ist die einfachste Sache zu tun
beispielsweise
druckt
InformationsquelleAutor Hiskel Kelemework
Ich denke eine elegante Lösung kann wie folgt Aussehen:
InformationsquelleAutor Amjad