Estou repetindo uma lista e quero imprimir o índice do item, se ele atender a uma determinada condição. Como eu faria isso?
Exemplo:
testlist = [1,2,3,5,3,1,2,1,6]
for item in testlist:
if item == 1:
print position
Hummm. Houve uma resposta com uma compreensão da lista aqui, mas ela desapareceu.
Aqui:
[i for i,x in enumerate(testlist) if x == 1]
Exemplo:
>>> testlist
[1, 2, 3, 5, 3, 1, 2, 1, 6]
>>> [i for i,x in enumerate(testlist) if x == 1]
[0, 5, 7]
Atualizar:
Ok, você quer uma expressão geradora, teremos uma expressão geradora. Aqui está a compreensão da lista novamente, em um loop for:
>>> for i in [i for i,x in enumerate(testlist) if x == 1]:
... print i
...
0
5
7
Agora vamos construir um gerador ...
>>> (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
e de maneira bastante inteligente, podemos atribuir isso a uma variável e usá-la a partir daí ...
>>> gen = (i for i,x in enumerate(testlist) if x == 1)
>>> for i in gen: print i
...
0
5
7
E pensar que eu costumava escrever FORTRAN.
args = ['x', '-p1', 'v1', '-p2', 'v2']
. Em seguida, o comandoargs[[i for i, x in enumerate(args) if x == '-p1'][0] + 1]
retorna'v1'
E o que se segue?
Se você não tiver certeza se o elemento a procurar está realmente na lista, adicione uma verificação preliminar, como
ou
ou a "maneira pitônica", da qual não gosto muito porque o código é menos claro, mas às vezes é mais eficiente,
fonte
ValueError
Use enumerar:
fonte
xrange em vez do intervalo, conforme solicitado (ver comentários).
fonte
xrange
é preterido no Python 3.x, pois o novorange
é o antigoxrange
Aqui está outra maneira de fazer isso:
fonte
fonte
Experimente o abaixo:
fonte
Se sua lista ficou grande o suficiente e você esperava encontrar apenas o valor em um número escasso de índices, considere que esse código poderia ser executado muito mais rapidamente, porque você não precisa iterar todos os valores da lista.
Se você espera encontrar muito o valor, provavelmente deve anexar "index" a uma lista e imprimi-la no final para economizar tempo por iteração.
fonte
Eu acho que pode ser útil usar o método curselection () da biblioteca Tkinter:
Esse método funciona nos widgets da caixa de listagem do Tkinter, portanto, você precisará construir um deles em vez de uma lista.
Isso retornará uma posição como esta:
('0',) (embora versões posteriores do Tkinter possam retornar uma lista de entradas)
Qual é a primeira posição e o número será alterado de acordo com a posição do item.
Para mais informações, consulte esta página: http://effbot.org/tkinterbook/listbox.htm
Saudações.
fonte
Por que complicar as coisas?
fonte
Apenas para ilustrar um exemplo completo, juntamente com o
input_list
que possuisearies1
(exemplo: input_list [0]) no qual você deseja fazer uma pesquisaseries2
(exemplo: input_list [1]) e obter índices da série2, se existir na série1.Nota: Você
certain condition
irá na expressão lambda se as condições forem simplesresultado:
fonte
Eu acho que é exatamente o que você quer. ;-) 'id' sempre será o índice dos valores na lista.
fonte