Antworten:
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']
. Dann args[[i for i, x in enumerate(args) if x == '-p1'][0] + 1]
kehrt der Befehl zurück'v1'
Was ist mit den folgenden?
print testlist.index(element)
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
if element in testlist:
print testlist.index(element)
oder
print(testlist.index(element) if element in testlist else None)
oder der "pythonische Weg", den ich nicht so sehr mag, weil Code weniger klar ist, aber manchmal effizienter,
try:
print testlist.index(element)
except ValueError:
pass
ValueError
for i in xrange(len(testlist)):
if testlist[i] == 1:
print i
xrange anstelle des angeforderten Bereichs (siehe Kommentare).
xrange
wird in Python 3.x abgelenkt, da das Neue range
das Alte istxrange
Hier ist eine andere Möglichkeit, dies zu tun:
try:
id = testlist.index('1')
print testlist[id]
except ValueError:
print "Not Found"
[x for x in range(len(testlist)) if testlist[x]==1]
Versuchen Sie Folgendes:
testlist = [1,2,3,5,3,1,2,1,6]
position=0
for i in testlist:
if i == 1:
print(position)
position=position+1
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.
lookingFor = 1
i = 0
index = 0
try:
while i < len(testlist):
index = testlist.index(lookingFor,i)
i = index + 1
print index
except ValueError: #testlist.index() cannot find lookingFor
pass
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.
Ich denke, dass es nützlich sein könnte, die curselection () -Methode aus der Tkinter-Bibliothek zu verwenden:
from Tkinter import *
listbox.curselection()
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.
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 wollen series2
(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 verwendet
input_list = [[1,2,3,4,5,6,7],[1,3,7]]
series1 = input_list[0]
series2 = input_list[1]
idx_list = list(map(lambda item: series1.index(item) if item in series1 else None, series2))
print(idx_list)
Ausgabe:
[0, 2, 6]