Python für und wenn auf einer Linie
Ich habe ein Problem mit python.
Mache ich eine einfache Liste:
>>> my_list = ["one","two","three"]
Ich möchte erstellen Sie eine "single line-code" finden Sie einen string.
ich habe zum Beispiel diesen code:
>>> [(i) for i in my_list if i=="two"]
['two']
Aber wenn ich mir die variable falsch ist (ich finde den letzten Wert meiner Liste):
>>> print i
three
Warum funktioniert meine variable enthalten, das Letzte element und nicht das element, das ich will, zu finden?
Wenn Sie möchten, finden eine Liste von Elementen, die bestimmte Kriterien erfüllen, verwenden Sie dann
ich werde nicht der Wert, ist es immer noch zugewiesen, die Werte. Das Ergebnis enthält nur die Werte, die die Kriterien erfüllen.
Sie sind nicht falsch und Ihr Dolmetscher ist nicht falsch es ist nur, dass die Schleife geht bis zum letzten Wert, selbst wenn die Bedingung nicht erfüllt ist, so dass Sie immer "drei" zu vermeiden, könnten Sie tun, was @khelwood sagte
Warum bist du nicht mit
[i for i in my_list if ...]
. Wenn Sie möchten, zu finden, eine Position, die bestimmte Kriterien erfüllt, sollten mit next
; z.B. x = next(i for i in my_list if ...)
ich werde nicht der Wert, ist es immer noch zugewiesen, die Werte. Das Ergebnis enthält nur die Werte, die die Kriterien erfüllen.
Sie sind nicht falsch und Ihr Dolmetscher ist nicht falsch es ist nur, dass die Schleife geht bis zum letzten Wert, selbst wenn die Bedingung nicht erfüllt ist, so dass Sie immer "drei" zu vermeiden, könnten Sie tun, was @khelwood sagte
Warum bist du nicht mit
"two" in mylist
(die einen booleschen Wert zurückgibt) oder mylist.index("two")
(welche die position zurückgibt, an der der string gefunden)? Da haben Sie schon die Zeichenfolge, die Sie suchen, ist es sinnlos zu haben, kehrte er doch immer wieder von der Suche, nicht wahr?InformationsquelleAutor rostonik | 2015-09-15
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie produzieren eine gefilterte Liste anhand einer Liste erfassen.
i
ist noch gebunden wird, jeder und jedem element der Liste und das Letzte element ist immer noch'three'
haben, auch wenn es nachträglich herausgefiltert aus der Liste, die produziert wird.Sollten Sie nicht verwenden einer list-comprehension herausgreifen ein element. Verwenden Sie einfach ein
for
- Schleife und diebreak
zu Ende:Wenn Sie muss einen one-liner (die Zähler werden zum Python-Philosophie, wo Lesbarkeit Angelegenheiten), verwenden Sie das
next()
- Funktion und einen generator-Ausdruck:wird
i
zuNone
wenn es keine solchen übereinstimmenden element.Oben ist nicht sinnvoll, dass ein filter; Ihr sind im wesentlichen die Prüfung, ob der Wert
'two'
ist in der Liste. Sie könnenin
:InformationsquelleAutor Martijn Pieters
Beim ausführen
i
iteriert man die Liste durchmy_list
. Als die Liste Verständnis endet Auswertungi
ist zugewiesen, um das Letzte Element in der iteration, die ist"three"
.Ich denke, es ist erwähnenswert, dass
i
wird nur zugewiesen, um das Letzte Element im alten (pre 3.x) Versionen von Python. In Python 3.x der Geltungsbereich von Variablen ist beschränkt auf die in der Liste Verständnis also außerhalb der Verständnis sehen Sie den vorherigen Wert voni
, oder es nicht definiert wird, wenn es keinen vorherigen Wert.Ma Sie abgelehnt, ein Bearbeiten, die eigentlich mit dem Thema OP war nicht zuordnen das Ergebnis auf einen Wert.
Er fragte: "Warum ..." und das ist eine Antwort. Es ist ihm selbst überlassen, ob Sie diese zuordnen zu nichts, wenn überhaupt.
InformationsquelleAutor Cong Ma
In der Liste das Verständnis der Schleife die variable i wird global. Nach der iteration in der for-Schleife ist eine Referenz auf das Letzte element in der Liste.
Wenn Sie möchten, dass alle Spiele dann ordnen Sie die Liste einer Variablen:
Wenn Sie möchten, dass nur der erste Treffer könnte man eine Funktion generator
InformationsquelleAutor desiato