Réponses:
Hmmm. Il y avait une réponse avec une compréhension de 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:
D'accord, 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 facilement, nous pouvons attribuer 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'écrivais FORTRAN.
args = ['x', '-p1', 'v1', '-p2', 'v2']
. Puis la commande args[[i for i, x in enumerate(args) if x == '-p1'][0] + 1]
revient'v1'
Qu'en est-il de ce qui suit?
print testlist.index(element)
Si vous n'êtes pas sûr que l'élément à rechercher se trouve 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 "voie pythonique", que je n'aime pas tant car le code est moins clair, mais parfois plus efficace,
try:
print testlist.index(element)
except ValueError:
pass
ValueError
for i in xrange(len(testlist)):
if testlist[i] == 1:
print i
xrange au lieu de range comme demandé (voir les commentaires).
xrange
est supprimée dans Python 3.x, car le nouveau range
est l'ancienxrange
Voici une autre façon de procéder:
try:
id = testlist.index('1')
print testlist[id]
except ValueError:
print "Not Found"
[x for x in range(len(testlist)) if testlist[x]==1]
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
Si votre liste devenait suffisamment volumineuse et que vous ne vous attendiez à trouver la valeur que dans un nombre restreint d'indices, considérez que ce code pourrait s'exécuter beaucoup plus rapidement car vous n'avez pas à itérer chaque valeur 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 la valeur, vous devriez probablement simplement ajouter «index» à une liste et imprimer la liste à la fin pour gagner du temps par itération.
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 de listbox Tkinter, vous devrez donc en construire un au lieu d'une liste.
Cela renverra une position comme celle-ci:
('0',) (bien que les versions ultérieures de Tkinter puissent renvoyer une liste d'entiers à la place)
Ce qui est pour la première position et le nombre changera en fonction de la position de l'élément.
Pour plus d'informations, consultez cette page: http://effbot.org/tkinterbook/listbox.htm
Salutations.
Juste pour illustrer un exemple complet avec le input_list
qui a searies1
(exemple: input_list [0]) dans lequel vous voulez faire une recherche de series2
(exemple: input_list [1]) et obtenir les index de series2 s'il 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)
production:
[0, 2, 6]