Python >> Tutoriel Python >  >> Python

Accéder à l'index des itérables en Python

Résumé : Pour accéder à l'index des itérables comme les listes en Python, utilisez l'une des méthodes suivantes :

  • Utilisez enumerate() fonction.
  • Utilisez une variable de compteur avec la boucle For/While.
  • Utilisez une compréhension de liste.
  • Utilisez le NumPy bibliothèque.
  • Utilisez le itertools module.

Présentation

Un index peut être considéré comme la position d'un élément dans un type de données ordonné (comme une liste ou un tuple). Une chaîne peut être considérée comme une liste de caractères, chaque caractère ayant un index.

  • L'indexation commence de zéro à la longueur-1.
  • Python prend également en charge l'indexation négative.

Visualisons l'indexation à l'aide d'un schéma.

À partir de l'exemple ci-dessus, il est assez clair que :

  • La longueur de la chaîne est 23 tandis que l'indexation commence à 0 et se termine à 22.
  • L'indexation négative commence à la fin de la chaîne par -1 et se termine au début de la chaîne (-23).

Maintenant que nous avons une idée des index, passons à notre question essentielle :

Problème : Donnez une liste; comment accéder à l'index de chaque élément de la liste par une boucle ou toute autre méthode ?

Exemple 1 : Considérez le programme ci-dessous qui contient une liste de nombres. Nous voulons extraire chaque numéro avec son index comme indiqué ci-dessous :

items = [100, 200, 300, 400, 500]
for i in items:
    print('item #{} = {}'.format(???, i))

Résultat souhaité

item #0 = 100
item #1 = 200
item #2 = 300
item #3 = 400
item #4 = 500

Voyons maintenant les différentes manières de procéder :

Méthode 1 :Utilisation de la fonction enumerate()

Le moyen le plus efficace de trouver l'index des éléments dans une liste est d'utiliser une fonction Python intégrée appelée enumerate() . Cette méthode accepte un itérable (comme une liste, un tuple), lui ajoute un compteur, puis le renvoie sous forme d'objet.

enumerate(iterablestart) :Syntaxe pour le enumerate() méthode.

Remarque : L'indexation commence à 0 en Python, vous devez donc définir un numéro de départ au cas où vous voudriez utiliser un numéro différent comme index de départ.

Regardons le programme suivant pour comprendre comment nous pouvons utiliser cette méthode pour trouver les index des éléments de la liste :

items = [100, 200, 300, 400, 500]
for index, item in enumerate(items, start=1):
    print('item #{0} = {1}'.format(index, item))

Sortie :

item #1 = 100
item #2 = 200
item #3 = 300
item #4 = 400
item #5 = 500

Méthode 2 :Utiliser une variable de compteur et une boucle For

Vous pouvez créer une boucle for en utilisant une variable pour stocker l'index et accéder aux éléments de la liste en utilisant cette variable. Examinons le programme suivant pour comprendre comment cela fonctionne :

items = [100, 200, 300, 400, 500]
for i in range(len(items)):
    print(f'item #{i + 1} = {items[i]}')

Sortie :

item #1 = 100
item #2 = 200
item #3 = 300
item #4 = 400
item #5 = 500

Méthode 3 :Utilisation d'une boucle While et d'une variable de compteur

Tout comme la boucle for, nous pouvons également utiliser une boucle while pour créer une variable de compteur pour contenir les index des éléments, puis accéder aux éléments de la liste à l'aide de cette variable. Examinons le programme suivant pour comprendre comment cela fonctionne :

items = [100, 200, 300, 400, 500]
i = 0
while i <= len(items):
    print(f'item #{i + 1} = {items[i]}')
    i += 1

Sortie :

item #1 = 100
item #2 = 200
item #3 = 300
item #4 = 400
item #5 = 500

Méthode 4 :Utiliser une compréhension de liste

Jetons un coup d'œil au Python one-liner pour résoudre notre problème en utilisant une compréhension de liste :

items = [100, 200, 300, 400, 500]
[print(f"item #{index + 1} = {items[index]}") for index, item in enumerate(items)]

Sortie :

item #1 = 100
item #2 = 200
item #3 = 300
item #4 = 400
item #5 = 500

Méthode 5 :Utiliser le module Itertools

Nous pouvons utiliser le count() et zip() fonctions du itertools module pour trouver l'index de l'élément donné.

  1. count() est une fonction intégrée du itertools module qui est utilisé pour créer un itérateur et produit des entiers consécutifs basés sur les valeurs d'attributs start et step données.
  2. zip() est une autre fonction intégrée du itertools module qui accepte un itérable comme argument qui peut être une liste, un tuple, un fichier, un dictionnaire, etc. Il combine les éléments de plusieurs itérateurs et les stocke dans des tuples.

Voyons maintenant comment nous pouvons appliquer le concept ci-dessus dans notre solution :

from itertools import count

items = [100, 200, 300, 400, 500]
for i in zip(count(start=1, step=1), items):
    print(i)

Sortie

(1100)
(2 200)
(3 300)
(4 400)
(5 500)

Méthode 6 :Utilisation de la bibliothèque NumPy

Une autre approche pour trouver des indices consiste à utiliser le numpy bibliothèque. Vous vous demandez peut-être pourquoi utiliser une bibliothèque externe pour trouver l'index d'un élément dans une liste. Cela a-t-il même un sens? Oui. Vous ne trouverez pas cette méthode efficace dans le cas de scénarios simples, cependant, dans les situations où vous devez effectuer des opérations complexes à l'aide d'index, numpy est la solution la plus efficace dans de tels scénarios. NumPy est presque 50 fois plus rapide que les listes traditionnelles et c'est pourquoi il a besoin d'une mention honorable dans la liste de nos solutions suggérées.

Pour comprendre la puissance de NumPy Prenons un exemple différent où vous devez trouver l'index d'un nombre donné dans une collection. Veuillez suivre le code ci-dessous :

import numpy as np

items = [500, 200, 500, 400, 500]
value = 500
# numpy.where() function returns the indices of elements in an input array where the given condition is satisfied.
index = np.where(np.array(items) == value)[0]
print(f'item {value} is located at INDEX: {index}')

Sortie :

item 500 is located at INDEX: [0 2 4]

On pourrait soutenir que la solution ci-dessus pourrait également être atteinte par d'autres méthodes. Cependant, l'efficacité et la facilité avec lesquelles NumPy résout notre problème en font une bonne option.

Conclusion

Ainsi, dans cet article, les solutions décrites ci-dessus incluaient les méthodes suivantes :

  1. Utilisation de la fonction enumerate().
  2. Utiliser une variable de compteur avec la boucle For/While.
  3. Utiliser une compréhension de liste.
  4. Utiliser itertools module.
  5. Utiliser le NumPy bibliothèque.

J'espère qu'après avoir lu cet article, vous pourrez trouver des indices d'éléments dans des listes ou des tableaux sans aucun problème. Veuillez vous abonner et rester à l'écoute pour des articles plus intéressants.