PorównaniePorównania

list vs tuple

list to zmienna sekwencja, którą można modyfikować, a tuple to niezmienna sekwencja, która może być kluczem słownika albo elementem zbioru.

Na tej stronie

Porównanie w tabeli

#
  • Składnia

    list()
    Nawiasy kwadratowe []
    tuple()
    Nawiasy okrągłe (), jednoelementowa: (x,)
  • Można zmieniać po utworzeniu

  • Klucz słownika albo element zbioru

    list()
    Nie, TypeError: unhashable type
  • Metody modyfikujące (append, sort, …)

  • Zużycie pamięci i szybkość tworzenia

    list()
    Większe
    tuple()
    Mniejsze
  • Typowe użycie

    list()
    Lista zadań, wyniki dopisywane w pętli
    tuple()
    Współrzędne, wiersz danych, kilka wartości z return

Przykład

#
Python
tasks = ["HTML", "CSS"]
tasks.append("JavaScript")

point = (3, 4)

print(tasks)
print(point)

try:
    point[0] = 10
except TypeError as error:
    print(error)
Wynikzapisany wynik, możesz go sprawdzić
['HTML', 'CSS', 'JavaScript']
(3, 4)
'tuple' object does not support item assignment

Definicja i zastosowanie

#

Obie kolekcje przechowują elementy w ustalonej kolejności i obsługują te same odczytowe operacje: indeksowanie, wycinki, len(), in, pętlę for i rozpakowywanie. Elementy każdej z nich mogą mieć różne typy.

Różni je zmienność. Listę tworzysz nawiasami kwadratowymi i możesz ją modyfikować metodami append(), remove(), sort() i innymi. Krotkę tworzysz nawiasami okrągłymi (krotka jednoelementowa wymaga przecinka: (x,)), a po utworzeniu nie da się jej zmienić: dodać, usunąć ani podmienić elementu. Dzięki niezmienności krotka może być kluczem słownika i elementem zbioru, czego lista nie potrafi.

Gdy dane mają się zmieniać w czasie działania programu, na przykład lista zadań albo wyniki dopisywane w pętli, wybierz list. Gdy dane są z natury stałe, na przykład współrzędne punktu, wiersz z bazy albo wynik funkcji zwracającej kilka wartości naraz, wybierz tuple. Niezmienność bywa też dokumentacją: krotka mówi, że te dane się nie zmienią.

Składnia

#
Składnia
lista = [1, 2, 3]
krotka = (1, 2, 3)

Więcej przykładów

#
Krotka jako klucz słownika
Python
distances = {}
distances[(0, 0)] = 0
distances[(1, 2)] = 5

print(distances)

try:
    distances[[1, 2]] = 5
except TypeError as error:
    print(type(error).__name__)
Wynikzapisany wynik, możesz go sprawdzić
{(0, 0): 0, (1, 2): 5}
TypeError

Lista nie ma skrótu (hash), więc nie może być kluczem. Treść komunikatu błędu zależy od wersji Pythona, typ TypeError jest zawsze ten sam.

Rozpakowywanie działa tak samo dla obu
Python
list_values = ["Ania", 7]
tuple_values = ("Kuba", 3)

name1, level1 = list_values
name2, level2 = tuple_values

print(name1, level1)
print(name2, level2)
Wynikzapisany wynik, możesz go sprawdzić
Ania 7
Kuba 3

Dobre praktyki

#
  • Funkcja zwracająca kilka wartości (return a, b) tworzy krotkę. Rozpakujesz ją tak samo jak listę.
  • Do zamiany między nimi służą funkcje list() i tuple().
  • Jeśli lista nigdy nie powinna się zmienić, krotka to także sygnał dla innych programistów, że dane są stałe.

Powiązane hasła

#

Widzisz błąd albo brakuje przykładu? Napisz do nas.