Como encontrar o índice de um item em listas do Python

Neste guia, você aprenderá como encontrar o índice de um elemento em uma lista do Python, usando iterações simples e um método de lista integrado index().

Ao trabalhar com listas do Python, você pode precisar descobrir o índice no qual um determinado item ocorre. Você pode fazer isso por:

  • Percorrendo a lista e verificando se o item no índice atual é igual ao valor específico
  • Usando o método de lista interno index()

Você aprenderá ambos os itens acima neste tutorial. Vamos começar.👩🏽‍💻

Listas Python, Revisitadas

Em Python, uma lista é uma coleção de itens – do mesmo tipo ou de tipos de dados diferentes. Eles são mutáveis; você pode modificá-los no local sem ter que criar uma nova lista.

Considere este exemplo de frutas: uma lista de 5 frutas diferentes.

fruits = ["apple","mango","strawberry","pomegranate","melon"]

Você pode obter o comprimento de qualquer objeto Python usando a função len() integrada. Assim, você pode chamar a função len() com o objeto list (fruits) como argumento para obter seu comprimento, conforme mostrado abaixo.

len(fruits)
# Output: 5

Usaremos a lista de frutas como um exemplo de execução neste tutorial.

Indexação em listas Python

Python segue indexação zero. Portanto, em qualquer iterável do Python, o primeiro item está no índice 0, o segundo item está no índice 1 e assim por diante. Se o comprimento do iterável for k, então o último item está no índice k – 1.

Em Python, você pode usar a função range() para obter índices enquanto percorre iteráveis.

Nota: Quando você percorre range(k), obtém os índices 0,1,2,…,(k-1). Então, definindo k = len(list), você pode obter a lista de todos os índices válidos.

A célula de código a seguir explica isso.

for i in range(len(fruits)):
  print(f"i:{i}, fruit[{i}] is {fruits[i]}")

# Output
i:0, fruit[0] is apple
i:1, fruit[1] is mango
i:2, fruit[2] is strawberry
i:3, fruit[3] is pomegranate
i:4, fruit[4] is melon

Agora que abordamos o básico das listas do Python, vamos aprender como encontrar o índice de um item em uma lista.

  O que é o Triângulo Amarelo do Outlook?

Localizar índice de um item de lista por iteração usando for loops

Vamos considerar as frutas da lista da seção anterior. Aprenderemos como encontrar o índice de um item específico nesta lista por iteração usando o loop for.

Usando for Loop e função range()

Vamos corrigir target: o valor que estamos procurando na lista.

Você pode usar as funções for loop e range() para obter a lista de índices de 0 a len(frutas) – 1.

  • Percorra a lista de frutas acessando cada índice.
  • Verifique se o item no índice atual i é igual ao alvo.
  • Se True, imprima que o alvo foi encontrado no índice i.
fruits = ["apple","mango","strawberry","pomegranate","melon"]

target = "mango"

for i in range(len(fruits)):
  if fruits[i] == target:
   print(f"{target} found at index {i}")

# Output
mango found at index 1

Neste exemplo, a string de destino ‘mango’ aparece exatamente uma vez (no índice 1) na lista de frutas.

No entanto, às vezes o valor de destino aparece mais de uma vez ou não aparece. Para lidar com esses casos, vamos modificar o loop acima e envolver o conteúdo dentro de uma função chamada find_in_list.

Entendendo a definição da função

A função find_in_list tem dois parâmetros:

  • alvo: o valor que você está procurando e
  • py_list: a lista Python que você está pesquisando.
def find_in_list(target,py_list):
  target_indices = []
  for i in range(len(fruits)):
    if fruits[i] == target:
      target_indices.append(i)  
  if target_indices == []:
    print("Sorry, target not found!")
  else:
    print(f"{target} is found at indices {target_indices}")

No corpo da função, inicializamos uma lista vazia target_indices. Percorremos a lista e acessamos os itens da lista. Se o destino foi encontrado em um índice específico, adicionamos esse índice à lista target_indices usando o método append().

Nota: Em Python, list.append(item) adiciona item ao final da lista.

  • Se o destino nunca for encontrado, target_indices será uma lista vazia; o usuário é notificado de que o destino não está presente na lista.
  • Se o destino for encontrado em mais de um índice, target_indices conterá todos esses índices.

Em seguida, vamos redefinir a lista de frutas como mostrado.

Desta vez, estamos procurando a string de destino ‘mango’, que ocorre duas vezes – nos índices 1 e 4.

fruits = ["apple","mango","strawberry","pomegranate","mango","melon"]
target = "mango"
find_in_list(target,fruits)

# Output
mango is found at indices [1, 4]

Ao chamar a função find_in_list com alvo e frutos como argumentos, vemos que ambos os índices são retornados.

target = "turnip"
find_in_list(target,fruits)

# Output
Sorry, target not found!

Se você tentar procurar por ‘nabo’ que não está presente na lista de frutas, você receberá uma mensagem de que o alvo não foi encontrado.

  Corrigir o código de erro 80072EF3 do Xbox Live

Usando for Loop e função enumerate()

Em Python, você pode usar a função enumerate() para acessar o índice e os itens simultaneamente — sem precisar usar a função range().

A célula de código a seguir mostra como você pode usar a função enumerate() para obter os índices e os itens.

fruits = ["apple","mango","strawberry","pomegranate","mango","melon"]
for index,fruit in enumerate(fruits):
  print(f"Index {index}: {fruit}")

# Output
Index 0: apple
Index 1: mango
Index 2: strawberry
Index 3: pomegranate
Index 4: mango
Index 5: melon

Agora, vamos reescrever a função Python para encontrar o índice de itens na lista usando a função enumerate().

def find_in_list(target,py_list):
  target_indices = []
  for index, fruit in enumerate(fruits):
   if fruit == target:
    target_indices.append(index) 
  if target_indices == []:
    print("Sorry, target not found!")
  else:
    print(f"{target} is found at indices {target_indices}")

Assim como na seção anterior, agora você pode chamar a função find_in_list com argumentos válidos.

Você pode traduzir a definição de função acima em uma compreensão de lista equivalente e faremos isso na próxima seção.

Localizar índice de um item de lista por iteração usando compreensão de lista

As compreensões de lista em Python permitem que você crie listas de listas existentes com base em alguma condição. Aqui está a construção geral:

new_list = [<output> for <items in existing iterables> if <condition is true>] 

A figura abaixo descreve como identificar os elementos de compreensão de lista; usando isso, você pode converter a função find_in_list em uma compreensão de lista.

Usando o acima, a expressão para compreensão de lista para criar índices de destino é a seguinte.

target_indices = [index for index,fruit in enumerate(fruits) if fruit==target]

Como exercício, você pode tentar executar o trecho de código acima para alguns outros exemplos.

Encontre o índice de um item de lista usando o método index()

Para encontrar o índice de um item em uma lista do Python, você também pode usar o método .index() integrado. Aqui está a sintaxe geral:

list.index(value,start,end)

Analisando o método acima:

  • value é o valor de destino que você está procurando.
  • start e end são argumentos posicionais opcionais; você pode usá-los para pesquisar e encontrar o índice de um item na fatia da lista começando no início e estendendo-se até o fim – 1.
  Como alterar o diretório no prompt de comando (CMD)

Nota: O método .index() retorna apenas o índice da primeira ocorrência de valor na lista. Mesmo quando você encontra o índice de um item em uma fatia da lista [start: end-1]esse método retorna apenas o índice correspondente à primeira ocorrência do item.

Vamos revisitar nosso exemplo para entender como o método .index() funciona.

fruits = ["apple","mango","strawberry","pomegranate","mango","melon"]
target = "mango"

fruits.index(target)
1

Embora existam duas ocorrências de ‘mango’ na lista de frutas, você pode ver que apenas o índice da primeira ocorrência foi retornado.

Para obter o índice da segunda ocorrência de manga, podemos pesquisar na fatia da lista começando no índice 2 e estendendo-se até o índice 5, conforme mostrado abaixo.

fruits.index(target,2,5)
4

Como lidar com erros de valor em Python

Agora vamos ver o que acontece se você tentar encontrar o índice de um item que não está presente na lista, digamos, ‘cenoura’.

target = "carrot"

fruits.index(target)

# Output
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-17-81bd454e44f7> in <module>()
      1 target = "carrot"
      2 
----> 3 fruits.index(target)

ValueError: 'carrot' is not in list

Como visto na célula de código acima, isso lança um ValorErro. Em Python, você pode lidar com isso como uma exceção usando os blocos try e except.

A sintaxe geral para usar try-except é a seguinte.

try:
  # to do this
except <ErrorType>:
  # do this to handle <ErrorType> as exception

Usando os blocos try-except acima, podemos tratar ValueError como uma exceção.

target = "carrot"
try:
  fruits.index(target)
except ValueError:
  print(f"Sorry, could not find {target} in list")

# Output
Sorry, could not find carrot in list

O código acima faz o seguinte:

  • Se o destino estiver presente na lista, ele retornará o índice do destino.
  • Se o destino não estiver presente, ele trata ValueError como uma exceção e imprime a mensagem de erro.

Resumindo

Aqui está um resumo dos diferentes métodos que você aprendeu para encontrar o índice de um item em uma lista do Python.

  • Você pode usar as funções for loop e range() do Python para obter os itens e seus respectivos índices. Verifique se os itens nos índices correspondem ao alvo.
  • Você também pode usar a função enumerate() para acessar simultaneamente o item e o índice.
  • Você pode usar os dois métodos acima dentro de uma expressão de compreensão de lista.
  • Para encontrar o índice de um item em uma lista, você também pode usar o método .index() integrado.
  • list.index(value) retorna o índice da primeira ocorrência de value na lista. Se o valor não estiver presente, ele gera um ValueError.
  • Você pode pesquisar em uma determinada fatia da lista usando list.index(value, start, end) para pesquisar a ocorrência de um valor na fatia da lista [start:end-1].

Em seguida, aprenda a classificar um dicionário Python por chave ou valor. Boa programação em Python!