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 :
- Accéder à l’élément de la liste dans un
try/except
déclaration. - Si un
IndexError
est soulevé, il renvoie une valeur par défaut. - 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 :
- Vérifiez si l’index fourni existe.
- Si l’index existe, accéder à la liste à l’index.
- 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 3
le 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 0
et 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) - 1
donc 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.