web-dev-qa-db-fra.com

Comment obtenir la position de l'article dans une liste?

Je parcours une liste et je souhaite imprimer l'index de l'élément s'il remplit certaines conditions. Comment je ferais ça?

Exemple: 

testlist = [1,2,3,5,3,1,2,1,6]
for item in testlist:
    if item == 1:
        print position
145
Sean

Hmmm. Il y avait une réponse avec une compréhension de la liste ici, mais elle a disparu.

Ici:

 [i for i,x in enumerate(testlist) if x == 1]

Exemple:

>>> testlist
[1, 2, 3, 5, 3, 1, 2, 1, 6]
>>> [i for i,x in enumerate(testlist) if x == 1]
[0, 5, 7]

Mettre à jour:

Ok, vous voulez une expression de générateur, nous aurons une expression de générateur. Voici à nouveau la compréhension de la liste, dans une boucle for:

>>> for i in [i for i,x in enumerate(testlist) if x == 1]:
...     print i
... 
0
5
7

Maintenant, nous allons construire un générateur ...

>>> (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

et assez rapidement, nous pouvons assigner cela à une variable, et l'utiliser à partir de là ...

>>> gen = (i for i,x in enumerate(testlist) if x == 1)
>>> for i in gen: print i
... 
0
5
7

Et dire que j’ai écrit FORTRAN.

254
Charlie Martin

Qu'en est-il de ce qui suit?

print testlist.index(element)

Si vous ne savez pas si l'élément à rechercher est réellement dans la liste, vous pouvez ajouter une vérification préliminaire, comme

if element in testlist:
    print testlist.index(element)

ou

print(testlist.index(element) if element in testlist else None)

ou la "méthode pythonique", que je n'aime pas tant parce que le code est moins clair, mais parfois plus efficace,

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

Utilisez énumérer:

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 au lieu de la plage demandée (voir commentaires).

10
jakber

Voici une autre façon de faire ceci:

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

Essayez le ci-dessous:

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

Si votre liste est suffisamment grande et que vous ne souhaitez trouver la valeur que dans un nombre d'indices fragmenté, considérez que ce code pourrait s'exécute beaucoup plus rapidement car vous n'avez pas à itérer toutes les valeurs de la liste.

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

Si vous vous attendez à trouver beaucoup de valeur, vous devriez probablement simplement ajouter "index" à une liste et l'imprimer à la fin pour gagner du temps par itération.

1
Chris Cameron

Pourquoi compliquer les choses?

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

Je pense qu'il pourrait être utile d'utiliser la méthode curselection () de la bibliothèque Tkinter:

from Tkinter import * 
listbox.curselection()

Cette méthode fonctionne sur les widgets Tkinter listbox, vous devez donc en créer un au lieu d'une liste.

Cela retournera une position comme celle-ci:

('0',) (bien que les versions ultérieures de Tkinter puissent retourner une liste d'ints à la place)

Ce qui est pour la première position et le nombre changera en fonction de la position de l'article.

Pour plus d'informations, voir cette page: http://effbot.org/tkinterbook/listbox.htm

Salutations.

0
xXAngelJinXx