Porovnávání hodnot v Pythonu: operátory rovnosti a nerovnosti
V programovacím jazyce Python se k porovnávání, zda mají dva objekty shodnou hodnotu, používají operátory pro rovnost a nerovnost. Tento článek vás provede používáním těchto operátorů na mnoha příkladech.
V tomto tutoriálu se podíváme na:
- Syntaxi operátoru nerovnosti (!=) a situace, ve kterých se používá.
- Syntaxi operátoru rovnosti (==) doplněnou o praktické ukázky.
- Použití operátorů „is“ a „is not“ k určení, zda dva objekty v Pythonu jsou totožné.
Pojďme začít.
Operátor nerovnosti v Pythonu: syntaxe
Pro libovolné dva objekty v Pythonu, označené jako obj1
a obj2
, vypadá syntaxe operátoru nerovnosti takto:
<obj1> != <obj2>
- Výraz vrací
True
, pokud se hodnotyobj1
aobj2
liší. - V opačném případě vrací
False
.
Poznámka: Jak už bylo zmíněno, obj1
a obj2
mohou být celá čísla, čísla s plovoucí desetinnou čárkou, textové řetězce, seznamy atd.
Praktické příklady operátoru nerovnosti
Nyní si na příkladech ukážeme, jak tento operátor funguje.
Porovnávání hodnot pomocí operátoru nerovnosti
Podívejme se na první příklad.
num1 = 27
num2 = 3 * 9
num1 != num2
# Výstup: False
Kódové ukázky lze spouštět přímo v prohlížeči na stránkách etechblog.cz Python IDE. Můžete si ale zvolit i spuštění kódu na vašem počítači.
Vzhledem k tomu, že num1
je 27 a num2
je také 27 (protože 3 * 9 = 27), jsou hodnoty obou proměnných stejné. Proto operátor !=
vrátí False
.
Další příklad:
V tomto kódu je num1
nastaveno na hodnotu 7 a num2
je řetězec „7“. Protože jde o rozdílné datové typy, operátor nerovnosti vrací True
.
num1 = 7
num2 = "7"
num1 != num2
# Výstup: True
Pokud chceme převést řetězec na celé číslo, můžeme to udělat takto:
num1 = 7
num2 = int("7")
num1 != num2
# Výstup: False
V tomto případě vidíme, že operátor vrací False
, protože num1
a num2
mají nyní stejnou číselnou hodnotu 7.
Operátor nerovnosti lze také použít s kolekcemi dat, jako jsou seznamy, n-tice a množiny.
Důležité: Při porovnávání kolekcí operátor nerovnosti porovnává jednotlivé prvky. Například dva seznamy seznam1
a seznam2
o délce n
jsou považovány za různé, pokud existuje alespoň jeden index i
, pro který seznam1[i] != seznam2[i]
platí.
Zde je příklad:
list1 = [2, 4, 6, 8]
list2 = [2, 4, 6, 9]
list1 != list2
# Výstup: True
V uvedeném příkladu se seznam1
a seznam2
liší pouze jedním prvkem, takže operátor !=
správně vrací True
.
Operátor nerovnosti v podmíněných výrazech
Operátor nerovnosti se často používá v podmínkách. Například můžeme zjistit, zda je číslo liché.
Číslo, které není dělitelné dvěma, je liché. Tuto podmínku můžeme ověřit pomocí num % 2 != 0
.
num = 7
if(num % 2 != 0):
print("Číslo je liché.")
else:
print("Číslo je sudé.")
# Výstup: Číslo je liché.
Podmínky můžeme využít i v konstrukci list comprehension pro výběr prvků splňujících určité kritérium. V následujícím příkladu je liche
seznam všech lichých čísel menších než 10.
liche = [num for num in range(10) if num % 2 != 0]
print(liche)
# Výstup: [1, 3, 5, 7, 9]
Tím uzavíráme část o operátoru nerovnosti !=
. ✅
Jak jste možná uhodli, operátor rovnosti funguje opačně.
Více se o něm dozvíme v další kapitole.
Operátor rovnosti v Pythonu: syntaxe
Syntaxe operátoru rovnosti je následující:
<obj1> == <obj2>
- Operátor vrací
True
, pokud majíobj1
aobj2
stejnou hodnotu. - V opačném případě vrací
False
.
Praktické příklady operátoru rovnosti
Operátor ==
se používá velmi podobně jako operátor !=
. Podívejme se na příklady:
- Jak porovnat dva textové řetězce.
- Jak zjistit, zda je číslo sudé.
- Jak použít podmínky v list comprehension.
Porovnávání hodnot pomocí operátoru rovnosti
V následujícím kódu mají str1
a str2
stejnou hodnotu, proto operátor ==
vrátí True
.
str1 = "programování"
str2 = "programování"
str1 == str2
# Výstup: True
Nyní si ukážeme použití operátoru rovnosti v podmínce.
Důležité: Číslo, které je beze zbytku dělitelné dvěma, je sudé. V kódu to odpovídá podmínce num % 2 == 0
.
num = 10
if(num % 2 == 0):
print("Číslo je sudé.")
else:
print("Číslo je liché.")
# Výstup: Číslo je sudé.
Použijme nyní list comprehension, abychom získali seznam všech sudých čísel menších než 10.
suda_10 = [num for num in range(10) if num % 2 == 0]
print(suda_10)
# Výstup: [0, 2, 4, 6, 8]
V tomto příkladu:
range(10)
vrací sekvenci čísel od 0 do 9.- Podmínka
num % 2 == 0
je splněna pouze pro sudá čísla. - Proměnná
suda_10
tak obsahuje seznam všech sudých čísel menších než 10.
Nyní už umíte ověřovat rovnost pomocí operátorů !=
a ==
.
V další sekci se naučíte, jak kontrolovat identitu objektů. Tedy ověřovat, zda se jedná o ten samý objekt v paměti.
Operátory „is“ a „is not“ v Pythonu
Pokud s Pythonem teprve začínáte, může být rozdíl mezi operátory ==
a is
matoucí. V této kapitole si to objasníme.
V předchozím příkladu jsme viděli, že str1
a str2
mají stejnou hodnotu a operátor ==
vrátil True
.
Nyní ale spusťte následující kód.
str1 = "programování"
str2 = "programování"
str1 is str2
# Výstup: False
Vidíme, že výraz str1 is str2
vrací False
.
Vysvětleme si, jak funguje operátor is
.
Operátor is
porovnává dva objekty a vrací True
pouze pokud jsou tyto objekty totožné, tedy pokud odkazují na stejné místo v paměti.
Ačkoli str1
a str2
mají stejnou hodnotu, nejsou totožné, protože odkazují na dvě různá místa v paměti, a mají proto rozdílnou identitu.
Důležité: ==
a is
nejsou totéž!
V Pythonu se dá získat identita objektu pomocí funkce id().
▶ Spuštěním následujícího kódu získáte identitu str1
a str2
.
id(str1)
# Příklad výstupu: 139935398870320
id(str2)
# Příklad výstupu: 139935398871344
Jak vidíme, str1
a str2
mají odlišné identity. Proto str1 is str2
vrací False
.
Shrnuto:
<obj1> is <obj2> # vrací True pokud a pouze pokud
id(<obj1>) == id(<obj2>) # vrací True
Rychle si to ověříme:
str1 = "programování"
str2 = str1
print(str1 is str2)
print(id(str1) == id(str2))
# Výstup
True
True
Operátor is not
je opakem operátoru is
. Vrací False
pouze, pokud dva objekty jsou totožné. V opačném případě vrací True
.
V předchozích příkladech si zkuste nahradit is
za is not
a podívejte se, jak se změní výsledek.
Závěr 👩💻
Doufám, že vám tento návod pomohl pochopit porovnávání hodnot v Pythonu.
V tomto tutoriálu jste se naučili:
- používat operátory rovnosti (
==
) a nerovnosti (!=
) pro porovnávání hodnot objektů. - rozdíl mezi rovností hodnot a identitou objektů.
- jak operátory
is
ais not
slouží k ověření totožnosti objektů.
Můžete si také přečíst, jak vypočítat časový rozdíl nebo jak vytvořit hru hada v Pythonu.
Uvidíme se v dalším tutoriálu. Do té doby vám přeji příjemné učení a kódování! 🎉