Quanto à sua primeira pergunta: esse código é perfeitamente adequado e deve funcionar se for item
igual a um dos elementos internos myList
. Talvez você tente encontrar uma string que não corresponda exatamente a um dos itens ou talvez esteja usando um valor flutuante que sofra imprecisão.
Quanto à sua segunda pergunta: Na verdade, existem várias maneiras possíveis de "encontrar" coisas nas listas.
Verificando se algo está dentro
Este é o caso de uso que você descreve: Verificando se algo está dentro de uma lista ou não. Como você sabe, você pode usar o in
operador para isso:
3 in [1, 2, 3] # => True
Filtrando uma coleção
Ou seja, localizando todos os elementos em uma sequência que atendem a uma determinada condição. Você pode usar compreensão de lista ou expressões geradoras para isso:
matches = [x for x in lst if fulfills_some_condition(x)]
matches = (x for x in lst if x > 6)
O último retornará um gerador que você pode imaginar como uma espécie de lista lenta que só será criada assim que você iterar. A propósito, o primeiro é exatamente equivalente a
matches = filter(fulfills_some_condition, lst)
no Python 2. Aqui você pode ver funções de ordem superior em funcionamento. No Python 3, filter
não retorna uma lista, mas um objeto semelhante ao gerador.
Localizando a primeira ocorrência
Se você deseja apenas a primeira coisa que corresponda a uma condição (mas ainda não sabe o que é), é bom usar um loop for (possivelmente usando a else
cláusula também, o que não é muito conhecido). Você também pode usar
next(x for x in lst if ...)
que retornará a primeira partida ou aumentará a StopIteration
se nenhuma for encontrada. Como alternativa, você pode usar
next((x for x in lst if ...), [default value])
Localizando a localização de um item
Para listas, também há o index
método que às vezes pode ser útil se você quiser saber onde um determinado elemento está na lista:
[1,2,3].index(2) # => 1
[1,2,3].index(4) # => ValueError
No entanto, observe que, se você tiver duplicatas, .index
sempre retornará o índice mais baixo: ......
[1,2,3,2].index(2) # => 1
Se houver duplicatas e você desejar todos os índices, poderá usar enumerate()
:
[i for i,x in enumerate([1,2,3,2]) if x==2] # => [1, 3]
myList
.