Obtenir des éléments de liste en toute sécurité en Python

Obtenir des éléments de liste en toute sécurité en Python #

Pour récupérer en toute sécurité un élément de liste :

  1. Accéder à l’élément de la liste dans un try/except déclaration.
  2. Si un IndexError est soulevé, il renvoie une valeur par défaut.
  3. Si aucune erreur n’est soulevée, retourne la valeur de l’élément de liste à l’indice
    spécifié.
def safe_list_get(li, index, default_value=None):
    try:
        return li[index]
    except IndexError:
        return default_value


my_list = ['bobby', 'hadz', 'com']

print(safe_list_get(my_list, 0))  
print(safe_list_get(my_list, 10))  
print(safe_list_get(my_list, 10, 'default'))  

print(safe_list_get(my_list, -3))  
print(safe_list_get(my_list, -10))  
print(safe_list_get(my_list, -10, 'default'))  

Nous avons créé une fonction réutilisable qui prend une liste, un indice et optionnellement une
valeur par défaut.

Dans le try nous essayons d’accéder à l’élément de la liste à l’index spécifié.
spécifié.

Si l’index existe, l’élément est retourné.

Si l’index n’existe pas, un IndexError est soulevé et est ensuite traité dans le
except bloc.

my_list = ['bobby', 'hadz', 'com']


print(my_list[25])

Si l’indice est hors de la plage, nous retournons la valeur par défaut.

La valeur par défaut est fixée à None sauf si l’utilisateur fournit un troisième argument dans l’appel à la fonction.

def safe_list_get(li, index, default_value=None):
    try:
        return li[index]
    except IndexError:
        return default_value


my_list = ['bobby', 'hadz', 'com']

print(safe_list_get(my_list, 10))  
print(safe_list_get(my_list, 10, 'default'))  

Cette approche peut également être utilisée pour accéder en toute sécurité à des éléments de liste utilisant des
négatifs.

def safe_list_get(li, index, default_value=None):
    try:
        return li[index]
    except IndexError:
        return default_value


my_list = ['bobby', 'hadz', 'com']


print(safe_list_get(my_list, -3))  
print(safe_list_get(my_list, -10))  
print(safe_list_get(my_list, -10, 'default'))  

Les indices négatifs peuvent être utilisés pour compter à rebours, par ex. my_list[-1] renvoie le
dernier élément de la liste et my_list[-2] renvoie l’avant-dernier élément.

Alternativement, vous pouvez vérifier la longueur de la liste avant d’accéder à un élément de la liste.
item.

Obtenir des éléments de liste en toute sécurité en utilisant len() #

Pour récupérer en toute sécurité un élément de liste :

  1. Vérifiez si l’index fourni existe.
  2. Si l’index existe, accéder à la liste à l’index.
  3. Si l’index n’existe pas, retourne une valeur par défaut.
def safe_list_get(li, index, default_value=None):
    return li[index] if -len(li) <= index < len(li) else default_value


my_list = ['bobby', 'hadz', 'com']

print(safe_list_get(my_list, 0))  
print(safe_list_get(my_list, 10))  
print(safe_list_get(my_list, 10, 'default'))  

print(safe_list_get(my_list, -3))  
print(safe_list_get(my_list, -10))  
print(safe_list_get(my_list, -10, 'default'))  

Nous avons utilisé une fonction inline if/else dans la fonction.

Le site if vérifie si la longueur niée de la liste est inférieure ou égale à l’index spécifié.
égale à l’indice spécifié.

Ceci est nécessaire pour gérer les indices négatifs, par exemple. -5.

Si la liste a une longueur de 3le plus grand indice négatif de la liste est -3.

En d’autres termes, le plus grand indice négatif d’une liste est égal à -len(my_list).

Le site if vérifie également si l’indice spécifié est inférieur à la longueur de la liste.
liste.

Les index Python sont basés sur zéro, donc le premier élément d’une liste a un index de 0et le dernier élément a un index de -1 ou len(my_list) - 1.

Le dernier élément d’une liste aura toujours un index de len(my_list) - 1donc nous
donc accéder à la liste à partir d’un index uniquement si cet index est inférieur à la
liste.

Si la condition est remplie, nous retournons l’élément de la liste à l’index spécifié,
sinon, nous retournons la valeur par défaut.

L’approche que vous choisissez est une question de préférence personnelle. J’utiliserais un
try/except car je la trouve assez facile à lire et intuitive.

Laisser un commentaire