W wielu miejscach (1,2,3)
i [1,2,3]
można używać zamiennie.Python: jaka jest różnica między (1,2,3) a [1,2,3], i kiedy powinienem użyć każdego?
Kiedy należy używać jednego z nich i dlaczego?
W wielu miejscach (1,2,3)
i [1,2,3]
można używać zamiennie.Python: jaka jest różnica między (1,2,3) a [1,2,3], i kiedy powinienem użyć każdego?
Kiedy należy używać jednego z nich i dlaczego?
Z Python FAQ:
Listy i krotki, natomiast podobne pod wieloma względami, są powszechnie stosowane w fundamentalnie różne sposoby. Krotki można uważać za podobne do rekordów Pascala lub C; są to małe zbiory powiązanych danych, które mogą być różnych typów, które są obsługiwane jako grupa. Na przykład współrzędna kartezjańska jest odpowiednio reprezentowana jako krotka z dwóch lub trzech liczb.
Listy są bardziej podobne do tablic w innych językach. Mają tendencję do posiadania różnej liczby obiektów, z których wszystkie mają ten sam typ i które są obsługiwane jedno po drugim.
Zazwyczaj zgodnie z konwencją nie wybiera się listy lub krotki w oparciu o jej (im) zmienność. Wybrałbyś krotkę dla małych kolekcji zupełnie różnych części danych, w których klasa w pełni rozwinięta byłaby zbyt ciężka, oraz listę zbiorów o rozsądnym rozmiarze, w której masz jednorodny zestaw danych.
Lista [1,2,3] jest dynamiczna i elastyczna, ale ta elastyczność pojawia się kosztem prędkości.
Krotka (1,2,3) jest stała (niezmienna), a przez to szybsza.
Krotki są szybkim \ elastycznym sposobem tworzenia kompozytowych typów danych. Listy są kontenerami dla, cóż, list obiektów.
Na przykład możesz użyć Listy do przechowywania listy danych ucznia w klasie.
Każdy szczegół ucznia na tej liście może być 3-krotną nazwą jego rolki, nazwą i wynikiem testu.
`[(1,'Mark',86),(2,'John',34)...]`
Ponadto, ponieważ krotki są niezmienne, mogą być używane jako klucze w słownikach.
Z subtelnym zastrzeżeniem, że krotka musi zawierać tylko inne niezmienne, które można uznać za nieosiągalne, np .: '([], 3)' nie jest nieosiągalne; '(" hi ", 3)' jest nieosiągalne; '(([], 3), 3)' nie jest zgodne z hashable; '((((), 3), 3)' jest nieosiągalne. – Jegschemesch
Jak wspomnieli inni, Listy i krotki są zarówno kontenerami, które mogą być używane do przechowywania obiektów Pythona. Listy są rozszerzalne, a ich zawartość może zmieniać się poprzez przypisanie, z drugiej strony krotki są niezmienne.
Ponadto, listy nie mogą być używane jako klucze w słowniku, podczas gdy krotki mogą.
Jeśli możesz znaleźć rozwiązanie, które działa z krotkami, użyj ich, ponieważ wymusza to niezmienność, co powoduje, że jesteś bardziej funkcjonalną ścieżką. Prawie nigdy nie żałujesz schodzenia z funkcjonalnej/niezmiennej ścieżki.
Ilekroć potrzebuję przekazać kolekcję elementów do funkcji, jeśli chcę, aby funkcja nie zmieniała podanych wartości - używam krotek.
Inaczej, jeśli chcę mieć funkcję do zmiany wartości, używam listy.
Zawsze, jeśli korzystasz z bibliotek zewnętrznych i musisz przekazać listę wartości do funkcji i nie masz pewności co do integralności danych, użyj krotki.
Pojęcie krotek są bardzo wyraziste:
pragmatycznie, są idealne do pakowania i rozpakowywania wartości (x,y=coord
).
W połączeniu ze słownikami (tablice hash), pozwalają na formy mapowania, które w innym przypadku wymagałyby wielu poziomów asocjacji. Na przykład rozważ oznaczenie, że (x, y) zostało znalezione.
// PHP
if (!isset($found[$x])) {
$found[$x] = Array();
$found[$x][$y] = true;
} else if (!isset($found[$x][$y])) {
$found[$x][$y] = true;
}
# Python
found[(x,y)] = True # parens added for clarity
Listy powinny być stosowane z oczekiwaniem operacji na jego zawartość (stąd różne wzmianki o niezmienności). Jeden z nich będzie chciał pop, push, splice, slice, search, insert before, insert after, etc z listą.
Krotki powinny być reprezentacją niskiego poziomu obiektu, w którym dokonuje się prostych porównań, lub operacjami, takimi jak wyodrębnianie n-tego elementu lub n elementów w przewidywalny sposób, takich jak podany wcześniej przykład współrzędnych.
Na koniec, listy nie są nieosiągalne, więc typ odwzorowania wykonanego za pomocą słowników (tabele mieszające w Perlu, tablice asocjacyjne w PHP) muszą być wykonane krotkami.
Oto prosty przykład krotek i słowników, a także w końcu:
"""
couple is a tuple of two people
doesLike is a dictionary mapping couples to True or False
"""
couple = "john", "jane"
doesLike = dict()
doesLike[couple] = True
doesLike["jane", "john"] = False # unrequited love :'(
[1, 2, 3]
jest lista, w którym można dodać lub usunąć elementy.
(1, 2, 3)
to krotka, w której raz zdefiniowana modyfikacja nie może być wykonana.
[1,2,3]
to lista.
(1,2,3)
jest krotką i niezmienną.
otwórz konsolę i uruchom python. Spróbuj tego:
>>> list = [1, 2, 3]
>>> dir(list)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delsli
ce__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getit
em__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__',
'__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__r
educe__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__'
, '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__',
'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
Jak można zobaczyć ostatni w ostatnim liście linii mają następujące metody: 'append', 'count' 'przedłużyć', 'index', 'insert', ' pop”, 'usuń', 'reverse', 'rodzaj'
teraz spróbuj to samo dla krotki:
>>> tuple = (1, 2, 3)
>>> dir(tuple)
['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__
format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__get
slice__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__
lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__'
, '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']
Tylko 'count' i 'index' z metod lista pojawi się tutaj.
Dzieje się tak dlatego, że krotki są niezmienne i nie obsługują żadnych modyfikacji. Zamiast tego są prostsze i szybsze we wdrażaniu wewnętrznym.
(1,2,3)
to krotka, a [1,2,3]
to lista. Krotka jest niezmiennym obiektem, podczas gdy lista jest zmienna.
(1,2,3)
to krotka i [1,2,3]
to lista. Każdy z tych dwóch reprezentuje sekwencje liczb, ale zauważ, że krotki są niezmienne, a lista jest zmiennymi obiektami Pythona.
dla których operacji są tuple szybciej? indeksowanie? – rafak