Skip to content

Convertire bool (True, False) e altri tipi tra loro in Python

Python

In Python, i valori di verità (valori booleani) sono rappresentati da oggetti di tipo bool, True e False. I risultati degli operatori di confronto vengono restituiti come Vero o Falso e vengono utilizzati nelle espressioni condizionali nelle istruzioni if ​​e così via.

Questo articolo descrive i seguenti contenuti:

  • bool è una sottoclasse di int
    • Vero e Falso equivalgono a 1 e 0
  • Prova del valore di verità in Python
  • Converti altri tipi in bool:bool()
    • Converti una stringa specifica in 1, 0:distutils.util.strtobool()
  • Converti bool in altri tipi
    • Converti bolo in numero:int(), float(), complex()
    • Converti bool in stringa:str()
    • Altri tipi

bool è una sottoclasse di int

True e False sono oggetti di tipo bool.

print(type(True))
# <class 'bool'>

print(type(False))
# <class 'bool'>

Puoi confermare che bool è una sottoclasse del tipo intero int con la funzione incorporata issubclass().

print(issubclass(bool, int))
# True

Vero e Falso equivalgono a 1 e 0

Vero e Falso equivalgono a 1 e 0.

print(True == 1)
# True

print(False == 0)
# True

Poiché bool è una sottoclasse di int, può essere calcolata come numeri interi.

print(True + True)
# 2

print(True * 10)
# 10

Pertanto, puoi contare il numero di Vero nell’elenco di Vero e Falso utilizzando la funzione incorporata sum() che calcola la somma dei numeri memorizzati nell’elenco.

print(sum([True, False, True]))
# 2

L’espressione del generatore può essere utilizzata per contare il numero di elementi in un elenco che soddisfa le condizioni. Usa [] per la comprensione degli elenchi e () per le espressioni del generatore.

Quando l’espressione del generatore è l’unico argomento della funzione, () può essere omesso, quindi può essere scritto come segue.

l = [0, 1, 2, 3, 4]

print([i > 2 for i in l])
# [False, False, False, True, True]

print(sum(i > 2 for i in l))
# 2

Prova del valore di verità in Python

In Python, anche gli oggetti diversi da True e False sono considerati veri o falsi nell’espressione condizionale dell’istruzione if.

I seguenti oggetti sono considerati Falsi, come nella documentazione ufficiale di cui sopra.

  • Costanti definitivo falso:None and False
  • Zero di qualsiasi tipo numerico:0, 0.0, 0j, Decimal(0), Fraction(0, 1)
  • Sequenze e raccolte:'', (), [], {}, set(), range(0)

Tutti gli altri oggetti sono considerati Vero.

Ad esempio, una stringa non vuota è considerata True.

if 'abc':
    print('True!')
# True!

Puoi controllare se un oggetto è considerato True o False usando bool() spiegato di seguito.

Converti altri tipi in bool:bool()

Puoi scegliere oggetti di altri in True o False con bool() in base al test del valore di verità sopra tipi.

Qualsiasi stringa str non vuota, sia ‘True’ che ‘False’, è considerata True. Una stringa vuota è considerata falsa. Se vuoi voler in base al contenuto della stringa, usa distutils.util.strtobool() spiegato di seguito.

print(bool('True'))
print(bool('False'))
print(bool('abc'))
# True
# True
# True

print(bool(''))
# False

Qualsiasi numero diverso da 0, sia esso un intero int, un numero a virgola mobile float o un numero complesso complesso, è considerato vero. Se è 0, è considerato Falso.

print(bool(1))
print(bool(2))
print(bool(1.23))
print(bool(-1))
# True
# True
# True
# True

print(bool(0))
print(bool(0.0))
print(bool(0j))
# False
# False
# False

Tutte le sequenze e le raccolte non vuote, esse sono liste, tuple, insiemi o dizionari, sono consider vere. Le sequenze e le raccolte vuote sono considerate false.

print(bool([1, 2, 3]))
print(bool((1, 2, 3)))
print(bool({1, 2, 3}))
print(bool({'k1': 1, 'k2':2, 'k3': 3}))
# True
# True
# True
# True

print(bool([]))
print(bool(()))
print(bool({}))
# False
# False
# False

Nessuno è considerato falso.

print(bool(None))
# False

Converti una stringa specifica in 1, 0:distutils.util.strtobool()

Come accennato in precedenza, bool() converte la stringa ‘False’ in True.

Puoi scegliere una stringa in base al suo contenuto con distutils.util.strtobool().

Converti una rappresentazione in stringa della verità in vero (1) o falso (0). I valori veri sono y, yes, t, true, su e 1; i valori false sono n, no, f, false, off e 0. Aumenta ValueError se val è qualcos’altro.
9. Riferimento API – distutils.util.strtobool() — Documentazione Python 3.9.1

Devi importare distutils.util. È incluso nella libreria standard, quindi non è richiesta alcuna installazione aggiuntiva.

distutils.util.strtobool() restituisce 1 per le stringhe ‘y’, ‘yes’, ‘true’, ‘on’, ‘1’ e restituisce 0 per ‘n’, ‘no’, ‘f’, ‘false ‘ , ‘spento’, ‘0’.

Non importa se è maiuscolo o minuscolo, quindi puoi usare “TRUE”, “True”, “YES”, ecc.

from distutils.util import strtobool

print(strtobool('true'))
print(strtobool('True'))
print(strtobool('TRUE'))
# 1
# 1
# 1

print(strtobool('t'))
print(strtobool('yes'))
print(strtobool('y'))
print(strtobool('on'))
print(strtobool('1'))
# 1
# 1
# 1
# 1
# 1

print(strtobool('false'))
print(strtobool('False'))
print(strtobool('FALSE'))
# 0
# 0
# 0

print(strtobool('f'))
print(strtobool('no'))
print(strtobool('n'))
print(strtobool('off'))
print(strtobool('0'))
# 0
# 0
# 0
# 0
# 0

Aumenta ValueError per altri valori.

# print(strtobool('abc'))
# ValueError: invalid truth value 'abc'

Se vuoi accettare input diversi dalle stringhe specifiche, devi gestire le eccezioni.

try:
    strtobool('abc')
except ValueError as e:
    print('other value')
# other value

Il nome è strtobool(), ma il valore restituito è int (1 o 0) invece di bool (True o False).

print(type(strtobool('true')))
# <class 'int'>

Nelle espressioni condizionali come le istruzioni if, 1 e 0 sono considerati Vero e Falso, quindi non ci sono problemi nell’usarli così come sono.

if strtobool('yes'):
    print('True!')
# True!

Converti bool in altri tipi

Converti bolo in numero:int(), float(), complex()

Come accennato in precedenza, poiché True e False equivalgono a 1 e 0, possono essere convertiti in 1 e 0 dei rispettivi tipi con int(), float() e complex().

print(int(True))
print(int(False))
# 1
# 0

print(float(True))
print(float(False))
# 1.0
# 0.0

print(complex(True))
print(complex(False))
# (1+0j)
# 0j

Converti bool in stringa:str()

Puoi selezionare True e False in stringhe ‘True’ e ‘False’ con str().

print(str(True))
print(str(False))
# True
# False

print(type(str(True)))
print(type(str(False)))
# <class 'str'>
# <class 'str'>

Le stringhe non vuote sono Consider True, quindi se converti False in stringhe con str() e poi di nuovo in bool con bool(), sarà True.

print(bool(str(False)))
# True

Altri tipi

list() e tuple() non possono avere i tipi bool in liste e tuple. Non verrà convertito in un elenco vuoto.

# print(list(True))
# TypeError: 'bool' object is not iterable