Tuple je vestavěný datový typ v Pythonu, který se používá k ukládání kolekce dat. Je podobný seznamu, ale je o něco rychlejší.
Jeho omezení však činí seznamy v některých situacích žádoucími. V tomto článku vysvětlím vše, co potřebujete vědět, abyste mohli začít používat n-tice.
Table of Contents
Co je to Tuple?
Jak již bylo zmíněno dříve, n-tice je jedním z vestavěných datových typů v Pythonu, které se používají k ukládání kolekcí dat. Je podobný seznamu Python v tom, že ukládá data v iterovatelném formátu podobném poli. Na rozdíl od seznamu je však n-tice neměnná. To znamená, že jakmile je jednou vytvořen, jeho hodnoty nelze změnit.
Další prvky nelze přidávat a stávající prvky nelze odstraňovat. N-tice je proto ideální při ukládání dat, která se nemění. Může se dokonce jednat o soubor dat různých typů. V další části probereme různé způsoby vytváření n-tic v Pythonu.
Jak vytvořit n-tici v Pythonu?
Existují alespoň tři způsoby, jak vytvořit n-tice v Pythonu. V této části pokryjeme tři nejběžnější metody, které pravděpodobně použijete a uvidíte při čtení kódu od ostatních.
Chcete-li spustit následující příklady kódu, budete muset mít nainstalovaný Python. Pokud ještě nemáte nainstalovaný Python, zde je užitečný průvodce instalací Pythonu. Případně můžete svůj kód spustit v online běhovém prostředí Pythonu, jako je Google Colab.
#1. Použití n-ticového literálu (závorky)
Nejběžnějším způsobem, jak zobrazit n-tice definované v Pythonu, je umístění kolekce hodnot do závorek. Tyto hodnoty jsou odděleny čárkami. Následující příklad ilustruje tuto metodu:
# Creates a tuple by placing values between parentheses values = (1, 2, 3) # Printing out the tuple to the screen print(values) # Printing out the type of values variable print(type(values))
Spuštění tohoto kódu vytvoří následující:
Jak můžete vidět z výstupu, n-tice obsahuje hodnoty, kterými jsme ji inicializovali. Je také typu
Když vytváříte n-tice v Pythonu, závorky nejsou nutné. Proto jsou tyto hodnoty = 1, 2, 3 stejně platné jako tyto hodnoty = (1, 2, 3). Doporučuje se však používat závorky, aby byl váš kód srozumitelnější.
Vytváření n-tic s jedním prvkem v Pythonu je trochu složitější. Místo pouhého umístění jednoho prvku do závorek je také nutné přidat koncovou čárku. Zde je příklad pro ilustraci:
# Without trailing comma, this won't create a tuple not_a_tuple = (1) # With trailing comma, this will create a tuple a_tuple = (1,) # Printing not_a_tuple print(not_a_tuple) # Printing not_a_tuple's data type print(type(not_a_tuple)) # Printing a_tuple print(a_tuple) # Printing a_tuple's data type print(type(a_tuple))
Spuštěním výše uvedeného kódu uvidíte, že not_a_tuple se stane int s hodnotou 1. To je důležité mít na paměti při vytváření n-tic.
#2. Použití funkce konstruktoru
Druhá metoda pro vytváření n-tic v Pythonu používá funkci konstruktoru n-tic. V této metodě zavoláte funkci a předáte iterovatelný objekt jako seznam jako argument. To bude převedeno na n-tici. Zde je příklad:
# Creating tuple from a list of values values = tuple([1, 2, 3]) # Printing out the values print(values) # Printing out the data type of the values identifier print(type(values))
Jak vidíte, použití funkce dosáhne stejného výsledku jako použití literálu. Funkce vám však umožňuje vytvořit n-tici na základě dynamické hodnoty, jako je seznam, jehož hodnoty jsou známy pouze za běhu. S první metodou byste při psaní kódu museli znát hodnoty nebo identifikátory, které tvoří vaši n-tici.
#3. Vytvoření prázdného n-tice
Při práci s n-ticemi v kódu možná budete muset vytvořit prázdné n-tice. Prázdné n-tice jsou vytvořeny tak, jak byste očekávali. Při jejich vytváření můžete použít buď konstruktor n-tice, nebo literál to. Zde je příklad demonstrující použití obou metod:
# Using the tuple literal empty_tuple_1 = () # Using the constructor empty_tuple_2 = tuple()
Prázdné n-tice jsou užitečné při reprezentaci prázdné sady výsledků. Zvažte následující funkci:
def create_range(start, end): return tuple(range(start, end))
Tato funkce vytvoří n-tici s hodnotami od začátku až po konečnou hodnotu, kterou předáte. Pokud byste chtěli iterovat výsledky funkce, použili byste něco takového:
my_values = create_range(0, 5) for value in my_values: pass
Pokud byste funkci create_range poskytli 5 a 5, výsledkem by byla prázdná n-tice. A pokud byste to zkusili iterovat, měli byste prostě nulové iterace a váš kód by pokračoval jako obvykle.
Na druhou stranu, pokud by nebyly žádné prázdné n-tice a místo toho jste dostali hodnotu None, pokus o iteraci přes ni by vyvolal chybu. Abyste zabránili zhroucení programu, museli byste implementovat test pro okrajový případ, kdy funkce create_range vrací None nebo jakoukoli jinou hodnotu, která představuje prázdnou n-tici.
To by vedlo k chaotickému kódu. V ideálním případě byste se chtěli co nejvíce vyhnout zvláštním případům. To znamená, že návratová hodnota všech funkcí by měla mít identické rozhraní, aby váš kód co nejvíce fungoval v obecném případě. V tomto případě to znamená neustále vracet n-tici, i když občas bude prázdná.
Jak získat přístup k prvkům
Existují dva způsoby přístupu k prvkům n-tice v Pythonu. První metodou je index a druhá je destrukcí prvků. Nejprve prozkoumáme, jak přistupovat k prvkům pomocí indexu.
Přístup k prvkům podle indexu
Přístup k prvkům pomocí indexu je podobný tomu, jak byste přistupovali k prvkům seznamu podle indexu. To se provádí pomocí notace v hranatých závorkách. N-tice používají systém indexování založený na nule, což znamená, že první prvek je index 0 a další prvek je index 1 až do posledního prvku.
Níže uvedený příklad ukazuje, jak přistupovat k prvkům podle indexu:
# Creating a tuple values = (1, 2, 3, 4) # Accessing the first element first_element = values[0] # Accessing the fourth element(index 3) fourth_element = values[3]
Můžete také použít negativní indexování. Prvek s indexem -1 je posledním prvkem a prvek s indexem -2 je druhým od posledního prvku.
# Creating the tuple values = (1, 2, 3, 4) # Accessing the last element last_element = values[-1] # Accessing the second from last element second_from_last_element = values[-2]
Kromě toho můžete také přistupovat k podkolekcím prvků z n-tice jejím rozřezáním. Je to podobné tomu, jak byste rozdělili seznam. Zápis je následující
# Creating the tuple values = (1, 2, 3, 4, 5, 6, 7) # Getting the first three elements values[1: 3] # Getting every other element values[::2]
Iterace přes prvky
N-tice je iterovatelný objekt v Pythonu. Proto můžete jeho prvky iterovat pomocí cyklu for, jak je znázorněno v následujícím příkladu:
values = (1, 2, 3, 4) for value in values: print(value)
Tento způsob přístupu k prvkům je ideální, když chcete přistupovat ke všem prvkům v n-tice.
Přístup k prvkům destrukcí
Chcete-li vysvětlit destrukturaci, zvažte následující scénář, kde se snažíme získat různé prvky do n-tice.
# Creating the tuple to record a user's information person_record = (1, 'John Doe', '[email protected]') # Accessing the different elements in the tuple to use in our code id = person_record[1] name = person_record[2] email = person_record[3]
Python nám umožňuje použít pohodlnější metodu přístupu k hodnotám, jak je znázorněno níže:
# Creating the tuple to record a user's information person_record = (1, 'John Doe', '[email protected]') id, name, email = person_record
Tomu se říká destrukce. To znamená, že první proměnné, v tomto případě id, bude přiřazena první hodnota v n-tice a druhé proměnné bude přiřazen druhý prvek. Toto pokračuje na konec n-tice. Výše uvedený příklad je ekvivalentní tomuto:
id, name, email = (1, 'John Doe', '[email protected]')
V tomto případě místo uložení n-tice do proměnné ji okamžitě destruujeme. Když to zkombinujete s vědomím, že při vytváření n-tic nemusíte používat závorky, můžete kód napsat takto.
id, name, email = 1, 'John Doe', '[email protected]'
Na konci toho všeho budete mít proměnné id, name a email s hodnotami 1, ‚John Doe‘ a ‚[email protected]‚. Toto je pohodlný a stručný způsob vytváření proměnných v Pythonu, který uvidíte v produkčním kódu. Pomáhá vědět, že jádrem této elegantní syntaxe je koncept n-tic.
Rozdíly mezi Tuple a List
I když jsou tyto dva podobné, některé klíčové rozdíly činí každý z nich vhodnější pro konkrétní případ použití. Pochopení těchto rozdílů vám pomůže rozhodnout se pro nejlepší datový typ k použití a napsat lepší a efektivnější kód.
AspectTupleListMemory StorageUloženo v souvislé pamětiUloženo v různých částech pamětiMutabilityNeměnné (nelze změnit)Mutable (lze změnit)Rychlost přístupu je rychlejšíPřístup je pomalejšíDatový typObvykle ukládá data různých typůObvykle ukládá data stejného typuPřípadypoužitíObvykle se používá k uložení kolekce podobných hodnot značky. Obvykle se používá k uložení kolekce podobných hodnot, jako jsou značky.
Výhody Tuple
#1. Je to rychlejší
Vzhledem k tomu, jak jsou hodnoty n-tice uloženy v souvislé paměti, je přístup k hodnotám rychlejší ve srovnání se seznamem. Nicméně, protože jednou vytvořené, nemohou být změněny, n-tice nejsou vždy tou nejlepší datovou strukturou pro ukládání kolekcí hodnot.
Jejich ideálním případem použití je ukládání velkého množství dat do paměti, která se nemění, ale během provádění programu k nim bude několikrát přistupováno. V tomto případě bude váš program nesmírně těžit ze zvýšení výkonu n-tic.
#2. Vrátit více hodnot
N-tice můžete použít k vrácení více hodnot z funkce a zničení výsledku. Například:
from random import randint def create_two_numbers(): first_num = randint(0, 9) second_num = randint(0, 9) return first_num, second_num first_num, second_num = create_two_numbers()
V tomto příkladu máme funkci, která vytvoří dvě náhodná čísla a vrátí je obě v n-tici. Příkaz return first_num, second_num je ekvivalentní zápisu return (first_num, second_num). Je to proto, že závorky jsou při vytváření n-tic volitelné. Abychom se dostali k výsledku, destruujeme ho.
#3. Hodnoty jsou chráněny proti zápisu
N-tice jsou po vytvoření neměnné. Jsou proto ideální pro ukládání dat do paměti, která se během provádění programu nemění. Zajišťují, že omylem nepřepíšete data někde jinde v kódu.
#4. Uložit více typů dat
N-tice umožňují ukládat hodnoty více datových typů. To vám umožňuje vytvářet záznamy dat, jako je ukládání podrobností o uživateli do n-tice. Můžete také ukládat složitější položky, jako jsou funkce, slovníky, další n-tice a dokonce i seznamy.
Společné metody n-tice
#1. počet()
Objekt n-tice obsahuje metodu počítání, která počítá, kolikrát se prvek vyskytuje. Například:
# Creating a tuple with several numbers values = (1, 2, 3, 4, 5, 4, 4, 6) # Counting the number of fours n_fours = values.count(4) # Prining out the number of fours print(n_fours)
Z tohoto příkladu vidíme, že číslo 4 se v naší n-tici vyskytuje právě třikrát.
#2. index()
Metodu index lze použít k nalezení indexu prvního výskytu hodnoty v n-tici. Pokud hodnota neexistuje, bude vyvolána výjimka ValueError. Zde je nějaký kód, který ilustruje, jak metoda indexu funguje:
# Creating a tuple with several numbers values = (1, 2, 3, 4, 5, 4, 4, 6) # Search for index of 4 index_of_four = values.index(4) print("Index of four:", index_of_four) # Search for index of 9 index_of_nine = values.index(9) print("Index of nine:", index_of_nine)
A když spustíme kód výše, toto je výstup:
V tomto případě je index 4 3 a kód běžel bez problémů. Ale když došlo k nalezení indexu 9, program vyvolal výjimku. Je důležité zacházet s takovými výjimkami, když píšete programy Python, které používají metodu index.
#3. délka()
Stejně jako všechny iterovatelné objekty v Pythonu mají n-tice vlastnost length, ke které máte přístup, když předáte n-tici jako argument funkci len().
# Creating a tuple values = (1, 2, 3, 4) # Getting the length length = len(values) # Print the output print(length)
Toto je výsledek spuštění výše uvedeného kódu.
#4. min() a max()
Metody min a max fungují tak, že prochází každý prvek v iterovatelném cyklu a porovnávají, zda je větší nebo menší než ten před ním. Nakonec max vrátí největší prvek v iterovatelném prvku, zatímco min vrátí nejmenší.
S čísly je operace zřejmá. S řetězci bude Python používat abecední pořadí. Nejmenší slovo, vrácené min, je první slovo, pokud byly řetězce zapsány v abecedním pořadí. Zatímco největší slovo je slovo poslední. Pokud iterovatelná obsahuje směs různých datových typů, pak obě operace selžou, protože Python neví, jak porovnat různé datové typy.
Zde je příklad kódu:
# Creating tuple with values values = (1, 2, 3, 4, 5) # Getting the largest value largest = max(values) # Getting the smallest value smallest = min(values) # Output the results print(largest) print(smallest)
#5. seřazeno()
Funkce sort v Pythonu přijímá iterovatelný objekt a vrací seznam seřazených prvků. Můžete zavolat funkci sorted, předat n-tici jako argument a získat prvky n-tice seřazené v seznamu. Chcete-li převést setříděný seznam na n-tici, můžete použít funkci konstruktoru. Zde je příklad:
# Creating a tuple with values in random order values = (1, 5, 3, 3, 2, 4) # Using sorted to sort the values into a list sorted_list = sorted(values) # Converting the list into a tuple sorted_tuple = tuple(sorted_list) # Printing the output print(sorted_tuple)
#6. Sčítání a násobení n-tic
Operace sčítání na dvou n-ticích je jednoduše spojí dohromady. Operace násobení opakuje prvky n-tice tolikrát, kolikrát je hodnota, kterou jste násobili. Zde je příklad pro ilustraci těchto dvou příkladů.
# Create a tuple with some values values = (1, 2, 3, 4, 5) # Create a new tuple using addition added = values + values # Create a new tuple using multiplication multiplied = values * 2 print("values + values =", added) print("values * 2 =", multiplied)
Závěrečná slova
V tomto článku jste se dozvěděli, že:
- N-tice jsou objekty podobné seznamům používané pro ukládání kolekcí hodnot.
- Na rozdíl od seznamů jsou neměnné.
- Jsou rychlejší a efektivnější než seznamy.
- Mohou být vytvořeny pomocí závorek a oddělováním hodnot čárkami.
- Mohou být také konstruovány pomocí funkce konstruktoru n-tice.
- K jednotlivým hodnotám můžete přistupovat pomocí indexového systému založeného na nule.
- Můžete také destruovat hodnoty z n-tice.
- Hodnoty můžete také iterovat pomocí smyčky for.
- Různé metody, které můžete použít s n-ticí.
Dále se možná budete chtít podívat na další obsah Pythonu, jako jsou metody seznamu Python a metody slovníku Python.