2008-08-05 28 views

Odpowiedz

30

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.

19

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.

+1

dla których operacji są tuple szybciej? indeksowanie? – rafak

10

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.

+0

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

1

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

1

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.

3

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.

7

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 :'(
    
2

[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

[1,2,3] to lista.

(1,2,3) jest krotką i niezmienną.

2

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.

0

(1,2,3) to krotka, a [1,2,3] to lista. Krotka jest niezmiennym obiektem, podczas gdy lista jest zmienna.

0

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

0
  • Krotka może reprezentować klucz w słowniku, ponieważ jest niezmienna, ponieważ jest .
  • Użyj list, jeśli masz kolekcję danych, która nie wymaga dostępu losowego do numeru .