Jak tworzyć krotki w Pythonie i dlaczego ich używać?

Tuple to wbudowany typ danych w Pythonie, który służy do przechowywania kolekcji danych. Jest podobny do listy, ale jest nieco szybszy.

Jednak jego ograniczenia sprawiają, że listy są bardziej pożądane w niektórych sytuacjach. W tym artykule wyjaśnię wszystko, co musisz wiedzieć, aby zacząć używać krotek.

Co to jest krotka?

Jak wspomniano wcześniej, krotka jest jednym z wbudowanych typów danych w Pythonie używanych do przechowywania kolekcji danych. Jest podobna do listy w Pythonie, ponieważ przechowuje dane w iterowalnym formacie przypominającym tablicę. Jednak w przeciwieństwie do listy krotka jest niezmienna. Oznacza to, że po utworzeniu nie można zmienić jego wartości.

Nie można dodawać dodatkowych elementów, a istniejących elementów nie można usuwać. Krotka jest zatem idealna do przechowywania danych, które się nie zmieniają. Może to być nawet zbiór danych różnego typu. W następnej sekcji omówimy różne sposoby tworzenia krotek w Pythonie.

Jak stworzyć krotkę w Pythonie?

Istnieją co najmniej trzy sposoby tworzenia krotek w Pythonie. W tej sekcji omówimy trzy najczęstsze metody, których prawdopodobnie będziesz używać i które zobaczysz podczas czytania kodu od innych.

Aby uruchomić poniższe przykłady kodu, musisz mieć zainstalowany język Python. Jeśli nie masz jeszcze zainstalowanego Pythona, oto pomocny przewodnik dotyczący instalowania Pythona. Alternatywnie możesz uruchomić swój kod w internetowym środowisku wykonawczym Pythona, takim jak Google Colab.

# 1. Używanie krotki literału (nawiasy)

Najczęstszym sposobem przeglądania krotek zdefiniowanych w Pythonie jest umieszczenie zbioru wartości w nawiasach. Te wartości są oddzielone przecinkami. Poniższy przykład ilustruje tę metodę:

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

Uruchomienie tego kodu spowoduje wyświetlenie następujących informacji:

Jak widać z danych wyjściowych, krotka zawiera wartości, którymi ją zainicjowaliśmy. Jest również typu .

Kiedy tworzysz krotki w Pythonie, nawiasy nie są konieczne. Dlatego te wartości = 1, 2, 3 są równie ważne jak te wartości = (1, 2, 3). Zaleca się jednak używanie nawiasów, aby kod był bardziej zrozumiały.

Tworzenie krotek z jednym elementem w Pythonie jest trochę trudne. Zamiast umieszczać tylko jeden element między nawiasami, musisz także dodać końcowy przecinek. Oto przykład dla zilustrowania:

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

Uruchamiając powyższy kod, zobaczysz, że not_a_tuple staje się int o wartości 1. Należy o tym pamiętać podczas tworzenia krotek.

#2. Korzystanie z funkcji konstruktora

Druga metoda tworzenia krotek w Pythonie wykorzystuje funkcję konstruktora krotek. W tej metodzie wywołujesz funkcję, przekazując obiekt iterowalny, taki jak lista, jako argument. Zostanie to przekonwertowane na krotkę. Oto przykład:

# 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 widać, użycie funkcji daje taki sam rezultat, jak użycie literału. Jednak funkcja umożliwia utworzenie krotki na podstawie wartości dynamicznej, takiej jak lista, której wartości są znane tylko w czasie wykonywania. W przypadku pierwszej metody podczas pisania kodu musiałbyś znać wartości lub identyfikatory, które składają się na krotkę.

#3. Tworzenie pustej krotki

Podczas pracy z krotkami w kodzie może być konieczne utworzenie pustych krotek. Puste krotki są tworzone zgodnie z oczekiwaniami. Podczas ich tworzenia można użyć konstruktora krotki lub literału to. Oto przykład pokazujący, jak użyć jednej z tych metod:

# Using the tuple literal
empty_tuple_1 = ()

# Using the constructor
empty_tuple_2 = tuple()

Puste krotki są przydatne, gdy reprezentują pusty zestaw wyników. Rozważ następującą funkcję:

def create_range(start, end):
    return tuple(range(start, end))

Ta funkcja tworzy krotkę z wartościami od początku do wartości końcowej, którą przekazujesz. Gdybyś chciał iterować po wynikach funkcji, użyłbyś czegoś takiego:

my_values = create_range(0, 5)

for value in my_values:
    pass

Jeśli podałeś 5 i 5 do funkcji create_range, wynikiem byłaby pusta krotka. A gdybyś spróbował go powtórzyć, miałbyś po prostu zero iteracji, a twój kod działałby normalnie.

Z drugiej strony, gdyby nie było pustych krotek, a zamiast tego dostałbyś wartość None, to próba iteracji po niej spowodowałaby błąd. Aby zapobiec awariom programu, musiałbyś zaimplementować test dla skrajnego przypadku, w którym funkcja create_range zwraca None lub jakąkolwiek inną wartość reprezentującą pustą krotkę.

Prowadziłoby to do niechlujnego kodu. Idealnie byłoby, gdybyś chciał w jak największym stopniu unikać szczególnych przypadków. Oznacza to, że wartość zwracana przez wszystkie funkcje powinna mieć identyczny interfejs, aby Twój kod działał w ogólnym przypadku w jak największym stopniu. W tym przypadku oznacza to ciągłe zwracanie krotki, chociaż czasami będzie ona pusta.

Jak uzyskać dostęp do elementów

Istnieją dwa sposoby uzyskiwania dostępu do elementów krotki w Pythonie. Pierwsza metoda polega na indeksowaniu, a druga na destrukturyzacji elementów. Najpierw zbadamy, jak uzyskać dostęp do elementów według indeksu.

Dostęp do elementów według indeksu

Dostęp do elementów za pomocą indeksu jest podobny do uzyskiwania dostępu do elementów listy za pomocą indeksu. Odbywa się to za pomocą notacji w nawiasach kwadratowych. Krotki używają systemu indeksowania od zera, co oznacza, że ​​pierwszy element ma indeks 0, a kolejny ma indeks 1 aż do ostatniego elementu.

Poniższy przykład pokazuje, jak uzyskać dostęp do elementów według indeksu:

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

Możesz także użyć indeksowania ujemnego. Element o indeksie -1 jest ostatnim elementem, a element o indeksie -2 jest drugim od ostatniego elementu.

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

Ponadto można uzyskać dostęp do podkolekcji elementów z krotki, dzieląc ją na plasterki. Jest to podobne do sposobu dzielenia listy. Notacja jest następująca [<start>: <end>: <skip>]. Poniższy przykład ilustruje cięcie:

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

Iteracja po elementach

Krotka jest obiektem iterowalnym w Pythonie. Dlatego możesz iterować po jego elementach za pomocą pętli for, jak pokazano w poniższym przykładzie:

values = (1, 2, 3, 4)

for value in values:
    print(value)

Ta metoda dostępu do elementów jest idealna, gdy chcesz uzyskać dostęp do wszystkich elementów krotki.

Dostęp do elementów przez destrukturyzację

Aby wyjaśnić destrukturyzację, rozważmy następujący scenariusz, w którym próbujemy uzyskać różne elementy w krotce.

# 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 pozwala nam korzystać z wygodniejszej metody uzyskiwania dostępu do wartości, jak pokazano poniżej:

# Creating the tuple to record a user's information
person_record = (1, 'John Doe', '[email protected]')

id, name, email = person_record

Nazywa się to destrukturyzacją. Oznacza to, że pierwszej zmiennej, w tym przypadku id, zostanie przypisana pierwsza wartość w krotce, a drugiej zmiennej do drugiego elementu. Trwa to do końca krotki. Powyższy przykład jest równoważny temu:

id, name, email = (1, 'John Doe', '[email protected]')

W tym przypadku zamiast przechowywać krotkę w zmiennej, natychmiast ją niszczymy. Gdy połączysz to ze świadomością, że nie musisz używać nawiasów podczas tworzenia krotek, możesz napisać kod w ten sposób.

id, name, email = 1, 'John Doe', '[email protected]'

Na koniec tego wszystkiego będziesz mieć zmienne id, name i email o wartościach 1, „John Doe” i „[email protected]’. Jest to wygodny i zwięzły sposób tworzenia zmiennych w Pythonie, który zobaczysz w kodzie produkcyjnym. Warto wiedzieć, że sercem tej eleganckiej składni jest koncepcja krotek.

Różnice między krotką a listą

Chociaż oba są podobne, niektóre kluczowe różnice sprawiają, że każdy z nich jest bardziej odpowiedni do określonego przypadku użycia. Zrozumienie tych różnic pomoże Ci wybrać najlepszy typ danych do użycia i napisać lepszy i wydajniejszy kod.

AspectTupleListPamięć Przechowywanie Przechowywane w ciągłej pamięci Przechowywane w różnych częściach pamięci Zmienność Niezmienne (nie można zmienić) Zmienne (można zmienić) Szybkość Dostęp jest szybszy Dostęp jest wolniejszy Typ danych Zwykle przechowuje dane różnych typów Zwykle przechowuje dane tego samego typu Przypadki użycia Zwykle używane do przechowywania kolekcji podobnych wartości, takich jak znaki. Zwykle używany do przechowywania kolekcji podobnych wartości, takich jak znaki.

Zalety krotki

# 1. To jest szybsze

Ze względu na sposób przechowywania wartości krotki w ciągłej pamięci dostęp do wartości jest szybszy w porównaniu z listą. Ponieważ jednak po utworzeniu nie można ich zmienić, krotki nie zawsze są najlepszą strukturą danych do przechowywania kolekcji wartości.

Idealnym przypadkiem ich użycia jest przechowywanie w pamięci dużej ilości danych, które się nie zmieniają, ale będą dostępne kilka razy podczas wykonywania programu. W takim przypadku twój program odniesie ogromne korzyści ze zwiększenia wydajności krotek.

#2. Zwróć wiele wartości

Możesz użyć krotek do zwrócenia wielu wartości z funkcji i zniszczenia wyniku. Na przykład:

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()

W tym przykładzie mamy funkcję, która tworzy dwie liczby losowe i zwraca je obie w krotce. Instrukcja return first_num, second_num jest równoważna zapisowi return (first_num, second_num). Dzieje się tak, ponieważ nawiasy są opcjonalne podczas tworzenia krotek. Aby uzyskać dostęp do wyniku, niszczymy go.

#3. Wartości są chronione przed zapisem

Krotki są niezmienne po utworzeniu. Są zatem idealne do przechowywania danych w pamięci, które nie zmieniają się podczas wykonywania programu. Zapewniają one, że przypadkowo nie nadpiszesz danych w innym miejscu kodu.

#4. Przechowuj wiele typów danych

Krotki umożliwiają przechowywanie wartości wielu typów danych. Pozwala to na tworzenie rekordów danych, takich jak przechowywanie danych użytkownika w krotce. Możesz także przechowywać bardziej skomplikowane elementy, takie jak funkcje, słowniki, inne krotki, a nawet listy.

Typowe metody krotek

# 1. liczyć()

Obiekt krotki zawiera metodę count, która zlicza liczbę wystąpień elementu. Na przykład:

# 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 tego przykładu widać, że liczba 4 występuje w naszej krotce dokładnie trzy razy.

#2. indeks()

Metoda index może być użyta do znalezienia indeksu pierwszego wystąpienia wartości w krotce. Jeśli wartość nie istnieje, zostanie zgłoszony wyjątek ValueError. Oto kod ilustrujący sposób działania metody index:

# 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 kiedy uruchomimy powyższy kod, to jest to wyjście:

W tym przypadku indeks 4 wynosi 3, a kod działał bez problemów. Ale kiedy przyszło do znalezienia indeksu 9, program zgłosił wyjątek. Ważne jest, aby obsłużyć takie wyjątki podczas pisania programów w języku Python, które używają metody index.

#3. len()

Podobnie jak wszystkie iterowalne obiekty w Pythonie, krotki mają właściwość length, do której można uzyskać dostęp, przekazując krotkę jako argument do funkcji len().

# Creating a tuple
values = (1, 2, 3, 4)

# Getting the length
length = len(values)

# Print the output
print(length)

Jest to wynik uruchomienia powyższego kodu.

#4. min() i maks()

Metody min i max działają poprzez zapętlenie każdego elementu w iteracji i porównanie, czy jest on większy czy mniejszy niż poprzedni. Na koniec max zwróci największy element iterowalny, podczas gdy min zwróci najmniejszy.

W przypadku liczb operacja jest oczywista. W przypadku łańcuchów Python użyje porządku alfabetycznego. Najmniejsze słowo, zwracane przez min, jest pierwszym słowem, jeśli łańcuchy zostały zapisane w porządku alfabetycznym. Podczas gdy największe słowo jest ostatnim słowem. Jeśli element iterowalny zawiera mieszankę różnych typów danych, obie operacje zakończą się niepowodzeniem, ponieważ Python nie wie, jak porównywać różne typy danych.

Oto przykład kodu:

# 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. posortowane()

Funkcja sorted w Pythonie przyjmuje obiekt iterowalny i zwraca listę posortowanych elementów. Możesz wywołać posortowaną funkcję, przekazać krotkę jako argument i uzyskać elementy krotki posortowane na liście. Aby przekonwertować posortowaną listę na krotkę, możesz użyć funkcji konstruktora. Oto przykład:

# 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. Dodawanie i mnożenie krotek

Operacja dodawania na dwóch krotkach po prostu łączy je razem. Operacja mnożenia powtarza elementy krotki tyle razy, ile wynosi wartość, którą pomnożyłeś. Oto przykład ilustrujący oba przykłady.

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

Ostatnie słowa

Z tego artykułu dowiedziałeś się, że:

  • Krotki to obiekty przypominające listy, używane do przechowywania kolekcji wartości.
  • W przeciwieństwie do list, są one niezmienne.
  • Są szybsze i wydajniejsze niż listy.
  • Można je konstruować za pomocą nawiasów okrągłych i oddzielając wartości przecinkami.
  • Można je również konstruować za pomocą funkcji konstruktora krotek.
  • Dostęp do poszczególnych wartości można uzyskać za pomocą systemu indeksów od zera.
  • Możesz także zniszczyć wartości z krotki.
  • Możesz także iterować po wartościach za pomocą pętli for.
  • Różne metody, których można użyć z krotką.

Następnie możesz sprawdzić więcej treści dotyczących Pythona, takich jak Python List Methods i Python Dictionary Methods.