Formulation du problème
Étant donné une liste en Python. Comment vérifier si la liste a un nombre pair d'éléments ?
Exemples :
[] --> True
[1] --> False
[1, 2] --> True
[1, 2, 3] --> False
Article connexe :
- Comment vérifier si une liste contient un nombre impair d'éléments ?
Méthode 1 :len() et Modulo
La façon la plus Pythonic de vérifier si une liste a un nombre pair d'éléments est d'utiliser l'expression modulo len(my_list)%2
qui renvoie 1
si la longueur de la liste est impaire et 0
si la longueur de la liste est paire. Donc, pour vérifier si une liste a un nombre pair d'éléments, utilisez l'expression len(my_list)%2==0
.
Voici un exemple de code simple :
def check_even(my_list): return len(my_list)%2==0 print(check_even([])) # True print(check_even([1])) # False print(check_even([1, 2])) # True print(check_even([1, 2, 3])) # False
En arrière-plan, n'hésitez pas à regarder la vidéo suivante sur l'opérateur modulo :
La fonction de longueur est expliquée dans cette vidéo et cet article de blog :
Une légère variante de cette méthode est la suivante.
Méthode 2 :len() et Modulo et bool()
Pour vérifier si une liste a un nombre pair d'éléments, vous pouvez utiliser l'expression modulo len(my_list)%2
qui renvoie 1
si la longueur de la liste est impaire et 0
si la longueur de la liste est paire. Donc, pour convertir la valeur paire 0 en booléen, utilisez le bool()
intégré fonction autour du résultat et inverser le résultat, c'est-à-dire not bool(len(my_list)%2)
.
Voici un exemple de code simple :
def check_even(my_list): return not bool(len(my_list)%2) print(check_even([])) # True print(check_even([1])) # False print(check_even([1, 2])) # True print(check_even([1, 2, 3])) # False
En arrière-plan, vous pouvez regarder cette vidéo explicative :
Méthode 3 :AND au niveau du bit
Vous pouvez utiliser l'expression len(my_list)&1
qui utilise l'opérateur ET au niveau du bit pour renvoyer 1 si la liste a un nombre pair d'éléments et 0 sinon. Maintenant, vous le convertissez simplement en booléen si nécessaire en utilisant le bool()
fonction et inversez-la en utilisant le not
opérateur :not bool(len(my_list)&1)
.
Le ET au niveau du bit de Python opérateur x & y
effectue un ET logique sur chaque position de bit sur les représentations binaires des entiers x
et y
. Ainsi, chaque bit de sortie est 1 si les deux bits d'entrée à la même position sont 1, sinon, c'est 0.
Si vous exécutez x & 1
, Python effectue un et logique avec la séquence de bits y=0000...001
. Pour le résultat, toutes les positions seront 0
et la dernière position sera 1 uniquement si x
la dernière position de est déjà 1
ce qui veut dire que c'est bizarre.
Après l'avoir converti en utilisant bool()
, vous devez toujours l'inverser en utilisant le not
opérateur pour qu'il renvoie True
si la liste a un nombre pair d'éléments.
Voici un exemple :
def check_even(my_list): return not bool(len(my_list)&1) print(check_even([])) # True print(check_even([1])) # False print(check_even([1, 2])) # True print(check_even([1, 2, 3])) # False
ET au niveau du bit est plus efficace que l'opérateur modulo, donc si les performances sont un problème pour vous, vous pouvez utiliser cette troisième approche.
Vous voudrez peut-être regarder cette vidéo sur l'opérateur Bitwise AND :