Jak vytvářet n-tice v Pythonu a proč je používat?

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.

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.

  Jak zabezpečit váš Synology NAS před ransomwarem

#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í [<start>: <end>: <skip>]. Následující příklad ukazuje krájení:

# 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.

  Jak najít ztracenou složku v aplikaci Outlook

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.

  10 aplikací/nástrojů pro testování vašich nových sluchátek

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.