Python >> Tutoriel Python >  >> Python

Comment vérifier si une liste a un nombre pair d'éléments ?

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 :