Ich iteriere über eine Liste und möchte den Index des Elements ausdrucken, wenn es eine bestimmte Bedingung erfüllt. Wie würde ich das machen?
Beispiel:
testlist = [1,2,3,5,3,1,2,1,6]
for item in testlist:
if item == 1:
print position
Hmmm. Hier gab es eine Antwort mit einem Listenverständnis, die jedoch verschwunden ist.
Hier:
[i for i,x in enumerate(testlist) if x == 1]
Beispiel:
>>> testlist
[1, 2, 3, 5, 3, 1, 2, 1, 6]
>>> [i for i,x in enumerate(testlist) if x == 1]
[0, 5, 7]
Aktualisieren:
Okay, Sie möchten einen Generatorausdruck, wir haben einen Generatorausdruck. Hier ist noch einmal das Listenverständnis in einer for-Schleife:
>>> for i in [i for i,x in enumerate(testlist) if x == 1]:
... print i
...
0
5
7
Jetzt bauen wir einen Generator ...
>>> (i for i,x in enumerate(testlist) if x == 1)
<generator object at 0x6b508>
>>> for i in (i for i,x in enumerate(testlist) if x == 1):
... print i
...
0
5
7
und geschickt genug, können wir das einer Variablen zuweisen und es von dort aus verwenden ...
>>> gen = (i for i,x in enumerate(testlist) if x == 1)
>>> for i in gen: print i
...
0
5
7
Und zu denken, ich habe FORTRAN geschrieben.
args = ['x', '-p1', 'v1', '-p2', 'v2']
. Dannargs[[i for i, x in enumerate(args) if x == '-p1'][0] + 1]
kehrt der Befehl zurück'v1'
Was ist mit den folgenden?
Wenn Sie nicht sicher sind, ob das zu suchende Element tatsächlich in der Liste enthalten ist, können Sie eine vorläufige Prüfung hinzufügen, z
oder
oder der "pythonische Weg", den ich nicht so sehr mag, weil Code weniger klar ist, aber manchmal effizienter,
quelle
ValueError
Verwenden Sie Aufzählung:
quelle
xrange anstelle des angeforderten Bereichs (siehe Kommentare).
quelle
xrange
wird in Python 3.x abgelenkt, da das Neuerange
das Alte istxrange
Hier ist eine andere Möglichkeit, dies zu tun:
quelle
quelle
Versuchen Sie Folgendes:
quelle
Wenn Ihre Liste groß genug bekam und man nur erwartet , dass den Wert in einer spärlichen Anzahl von Indizes zu finden, denkt , dass dieser Code könnte viel schneller ausführen , da Sie nicht jeden Wert in der Liste zu iterieren haben.
Wenn Sie erwarten, dass der Wert häufig gefunden wird, sollten Sie wahrscheinlich nur "Index" an eine Liste anhängen und die Liste am Ende ausdrucken, um Zeit pro Iteration zu sparen.
quelle
Ich denke, dass es nützlich sein könnte, die curselection () -Methode aus der Tkinter-Bibliothek zu verwenden:
Diese Methode funktioniert mit Tkinter-Listbox-Widgets, daher müssen Sie eines davon anstelle einer Liste erstellen.
Dies gibt eine Position wie folgt zurück:
('0',) (obwohl spätere Versionen von Tkinter möglicherweise stattdessen eine Liste von Ints zurückgeben)
Welches ist für die erste Position und die Nummer ändert sich je nach Position des Artikels.
Weitere Informationen finden Sie auf dieser Seite: http://effbot.org/tkinterbook/listbox.htm
Schöne Grüße.
quelle
Warum Dinge komplizieren?
quelle
Nur um ein vollständiges Beispiel zusammen mit dem zu veranschaulichen,
input_list
was hatsearies1
(Beispiel: input_list [0]) , in dem Sie eine Suche nach tun wollenseries2
(Beispiel: input_list [1]) und erhalten Indizes von series2 wenn es in series1 existiert.Hinweis:
certain condition
Wenn die Bedingungen einfach sind, wird der Lambda-Ausdruck verwendetAusgabe:
quelle
Ich denke, dass es genau das ist, was du willst. ;-) 'id' ist immer der Index der Werte in der Liste.
quelle