HOWTO · Python

Obtenir une négation d'un booléen en Python

Ce tutoriel montre comment nier un booléen en Python.

Sur cette page

Utilisez l’opérateur not de Python pour inverser la valeur de vérité d’une expression scalaire. Pour un tableau booléen NumPy, utilisez une opération élément par élément telle que ~ ou numpy.logical_not(). Les fonctions NumPy bitwise_not() et invert() inversent également les éléments d’un tableau booléen.

Utiliser l’opérateur not pour nier un booléen en Python

L’opérateur not évalue d’abord la valeur de vérité de son opérande, puis renvoie un booléen : True devient False, et False devient True. Il accepte aussi des valeurs qui ne sont pas elles-mêmes des booléens. Par exemple, not 1 vaut False, car 1 est considéré comme vrai ; le résultat est le booléen False, et non l’entier 0.

Cet exemple inverse une condition et affiche le booléen obtenu :

a = 1
print(bool(a))
print(not a)

Utiliser la fonction operator.not_() du module operator pour nier un booléen en Python

La fonction operator.not_() de la bibliothèque standard est l’équivalent appelable de l’opérateur not de Python. Elle évalue la valeur de vérité de son argument et renvoie un booléen. Utilisez-la lorsqu’une opération doit être transmise comme fonction, par exemple à map() pour parcourir une liste :

import operator

values = [True, True, False, True, False]
print(operator.not_(True))
print(list(map(operator.not_, values)))

map() applique la fonction fournie à chaque élément de l’itérable. Dans cet exemple, chaque élément de la liste est un booléen et la liste obtenue contient la valeur opposée pour chacun d’eux.

Utiliser l’opérateur ~ pour nier les valeurs booléennes d’un tableau NumPy en Python

Pour un tableau NumPy de type booléen, l’opérateur ~ effectue une inversion bit à bit élément par élément : chaque True devient False et chaque False devient True :

import numpy as np

values = np.array([True, True, False, True, False])
print(~values)

Ce comportement sur les tableaux booléens est utile pour inverser un masque. Les entiers Python ne sont pas des valeurs booléennes : appliquer ~ à un entier effectue une inversion bit à bit de l’entier. Ne l’utilisez donc pas pour nier la valeur de vérité d’une expression scalaire.

Utiliser la fonction bitwise_not() de NumPy pour nier une valeur booléenne

numpy.bitwise_not() est la forme fonctionnelle de l’opération bit à bit. Sur un tableau booléen, elle inverse chaque élément et produit le même résultat booléen élément par élément que ~ :

import numpy as np

values = np.array([True, True, False, True, False])
print(np.bitwise_not(values))

Utilisez cette fonction lorsqu’une opération NumPy nommée convient à votre code ; elle fonctionne aussi sur une seule valeur booléenne NumPy.

Utiliser la fonction invert() de NumPy pour nier une valeur booléenne en Python

numpy.invert() est un autre nom pour l’inversion bit à bit élément par élément de NumPy. Pour les tableaux booléens, son comportement recoupe celui de bitwise_not() et de ~ :

import numpy as np

values = np.array([True, True, False, True, False])
print(np.invert(values))

Choisissez l’écriture qui rend l’opération la plus claire dans votre code. Comme avec ~, appliquer invert() à des données entières effectue une inversion bit à bit, et non une négation de la valeur de vérité.

Utiliser la fonction logical_not() de NumPy pour nier une valeur booléenne en Python

numpy.logical_not() effectue une négation logique élément par élément. Sur un tableau booléen, elle donne les mêmes valeurs que les fonctions d’inversion bit à bit ci-dessus, tandis que son nom met l’accent sur les valeurs de vérité logiques :

import numpy as np

values = np.array([True, True, False, True, False])
print(np.logical_not(values))

Pour une expression scalaire Python, utilisez not ; pour un tableau booléen traité élément par élément, ces opérations NumPy fournissent le résultat correspondant sous forme de tableau.