Comment obtenir la position de l'élément dans la liste?

Je passe par la liste et je veux imprimer un index d'élément s'il correspond à une condition spécifique. Comment allais-je le faire?

Exemple:


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

Catherine

Confirmation de:

Hmmm. Voici la réponse à la liste de compréhension, 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:

Eh bien, si vous avez besoin d'une expression génératrice, nous aurons une expression génératrice. Voici une liste de compréhension à nouveau, dans le cycle 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 0x6b508="" at="" object="">
&gt;&gt;&gt; for i in /i for i,x in enumerate/testlist/ if x == 1/:
... print i
...
0
5
7


Et à coup sûr, nous pouvons l'affecter une variable et l'utiliser à partir de là ...


&gt;&gt;&gt; gen = /i for i,x in enumerate/testlist/ if x == 1/
&gt;&gt;&gt; for i in gen: print i
...
0
5
7


Et pense qu'avant d'avoir écrit FORTRAN.
</generator>

Babette

Confirmation de:

Qu'en est-il de la prochaine?


print testlist.index/element/


Si vous n'êtes pas sûr si l'élément souhaité est vraiment dans la liste, vous pouvez ajouter un chèque préliminaire, par exemple


if element in testlist:
print testlist.index/element/


ou


print/testlist.index/element/ if element in testlist else None/


ou "Chemin de python", Ce que je n'aime pas vraiment parce que le code est moins compréhensible, mais parfois plus efficace,


try:
print testlist.index/element/
except ValueError:
pass

Emilie

Confirmation de:

Utilisez la liste:


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

Hannah

Confirmation de:

for i in xrange/len/testlist//:
if testlist[i] == 1:
print i


xrange au lieu de la plage sur demande /Voir les commentaires/.

Emilie

Confirmation de:

Voici une autre façon de le faire:


try:
id = testlist.index/'1'/
print testlist[id]
except ValueError:
print "Not Found"

Dominique

Confirmation de:

[x for x in range/len/testlist// if testlist[x]==1]

Catherine

Confirmation de:

Essayez ce qui suit:


testlist = [1,2,3,5,3,1,2,1,6] 
position=0
for i in testlist:
if i == 1:
print/position/
position=position+1

Babette

Confirmation de:

Si votre liste est devenue assez grande et que vous vous attendiez à trouver une valeur uniquement dans un nombre raréfié d'index, gardez à l'esprit que ce code

peut

C'est beaucoup plus rapide, car vous n'avez pas besoin de répéter chaque valeur dans 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, vous devriez probablement simplement ajouter "index" À la liste et imprimez la liste à la fin pour gagner du temps sur chaque itération.

Dominique

Confirmation de:

Je pense qu'il serait utile d'utiliser la méthode curselection// de la bibliothèque thte Tkinter:


from Tkinter import * 
listbox.curselection//


Cette méthode fonctionne avec Tkinter listbox Widgets, vous devrez donc en créer l'un d'entre eux au lieu de la liste.

Cela rendra cette position comme celle-ci:

/'0',/

/Bien que les versions ultérieures Tkinter Peut retourner la liste int au lieu de cela/

Qui est destiné à la première position et le nombre variera en fonction de la position des marchandises.

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

Giselle

Confirmation de:

Pourquoi compliquer tout?


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

Giselle

Confirmation de:

Juste pour illustrer l'exemple complet avec
input_list

, qui a
searies1

/Exemple: input_list[0]/, dans lequel vous voulez rechercher
series2

/Exemple: input_list[1]/ et obtenir des index series2, Si cela existe dans series1.

Remarque: votre
certain condition

ira dans l'expression lambda, Si les conditions sont simples


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/


sortir:


[0, 2, 6]

Giselle

Confirmation de:

testlist = [1,2,3,5,3,1,2,1,6]
for id, value in enumerate/testlist/:
if id == 1:
print testlist[id]


Je pense que c'est exactement ce que vous voulez. ;-/
'id' Il y aura toujours un index des valeurs de la liste.

Pour répondre aux questions, connectez-vous ou registre