it-swarm.com.de

Wie bekomme ich die Position eines Artikels in einer Liste?

Ich durchlaufe eine Liste und möchte den Index des Artikels ausdrucken, wenn er 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
145
Sean

Hmmm. Hier gab es eine Antwort mit 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 wollen einen Generatorausdruck, wir haben einen Generatorausdruck. Hier nochmal 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 können wir das einer Variablen zuordnen und 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 hätte FORTRAN geschrieben.

254
Charlie Martin

Was ist mit dem 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 "Pythonic-Weg", den ich nicht so mag, weil Code weniger klar ist, aber manchmal effizienter ist.

try:
    print testlist.index(element)
except ValueError:
    pass
143
mmj

Aufzählung verwenden:

testlist = [1,2,3,5,3,1,2,1,6]
for position, item in enumerate(testlist):
    if item == 1:
        print position
40
zdan
for i in xrange(len(testlist)):
  if testlist[i] == 1:
    print i

xrange statt Bereich wie gewünscht (siehe Kommentare).

10
jakber

Hier ist ein anderer Weg, dies zu tun:

try:
   id = testlist.index('1')
   print testlist[id]
except ValueError:
   print "Not Found"
4
Phil Rankin
[x for x in range(len(testlist)) if testlist[x]==1]
3
user1713952

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
1
B Prashantkumar

Wenn Ihre Liste groß genug wurde und Sie nur erwartet hatten, den Wert in einer geringen Anzahl von Indizes zu finden, bedenken Sie, dass dieser Code könnte viel schneller ausgeführt werden kann, da Sie nicht jeden Wert in der Liste durchlaufen müssen.

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 davon ausgehen, dass Sie den Wert viel finden, sollten Sie "Index" an eine Liste anhängen und die Liste am Ende drucken, um Zeit pro Iteration zu sparen.

1
Chris Cameron

Warum kompliziert?

testlist = [1,2,3,5,3,1,2,1,6]
for position, item in enumerate(testlist):
    if item == 1:
        print position
0
Abhishek

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 von ihnen anstelle einer Liste erstellen.

Dies wird eine Position wie folgt zurückgeben:

('0',) (obwohl spätere Versionen von Tkinter möglicherweise eine Liste von Ints zurückgeben)

Welches ist für die erste Position und die Nummer ändert sich entsprechend der Artikelposition.

Weitere Informationen finden Sie auf dieser Seite: http://effbot.org/tkinterbook/listbox.htm

Schöne Grüße.

0
xXAngelJinXx