2008-08-05 10 views

Antwort

30

Vom Python FAQ:

Listen und Tupeln, während in vieler Hinsicht ähnlich, sind in grundsätzlich verschiedenen Arten verwendet. Tupel können als Pascal-Datensätze oder C-Strukturen ähnlich betrachtet werden; es handelt sich um kleine Sammlungen verwandter Daten, die verschiedenen Typen angehören können, die als Gruppe bearbeitet werden. Zum Beispiel wird eine kartesische Koordinate in geeigneter Weise als ein Tupel von zwei oder drei Zahlen dargestellt.

Listen sind auf der anderen Seite eher Arrays in anderen Sprachen. Sie neigen dazu, eine variierende Anzahl von Objekten zu halten, von denen alle den gleichen Typ haben und die nacheinander bedient werden.

Im Allgemeinen würden Sie per Konvention keine Liste oder ein Tupel wählen, nur basierend auf seiner (Un-) Veränderlichkeit. Sie würden ein Tupel für kleine Sammlungen völlig unterschiedlicher Daten auswählen, in denen eine ausgewachsene Klasse zu schwer wäre, und eine Liste für Sammlungen jeder vernünftigen Größe, in der Sie einen homogenen Datensatz haben.

19

Die Liste [1,2,3] ist dynamisch und flexibel, aber diese Flexibilität kommt mit einer Geschwindigkeit Kosten.

Das Tupel (1,2,3) ist fest (unveränderlich) und daher schneller.

+1

für welche Operationen sind Tuple schneller? Indizierung? – rafak

10

Tupel sind eine schnelle \ flexible Möglichkeit, zusammengesetzte Datentypen zu erstellen. Listen sind Container für, nun, Listen von Objekten.

Zum Beispiel würden Sie eine Liste verwenden, um eine Liste von Schülerdetails in einer Klasse zu speichern.

Jedes Schülerdetail in dieser Liste kann ein 3-Tupel sein, das die Rollennummer, den Namen und die Testergebnisse enthält.

`[(1,'Mark',86),(2,'John',34)...]` 

Da Tupel unveränderlich sind, können sie auch als Schlüssel in Wörterbüchern verwendet werden.

+0

Mit dem subtilen Vorbehalt, dass ein Tupel nur andere immutable enthalten muss, die als hashable angesehen werden können, z. B .: '([], 3)' ist nicht hashbar; '(" hi ", 3)' ist hashbar; '(([], 3), 3)' ist nicht hashbar; '(((), 3), 3)' ist waschbar. – Jegschemesch

1

Wie andere bereits erwähnt haben, sind Listen und Tupel beide Container, die zum Speichern von Python-Objekten verwendet werden können. Listen sind erweiterbar und ihre Inhalte können sich durch Zuweisung ändern, auf der anderen Seite sind Tupel unveränderlich.

Auch Listen können nicht als Schlüssel in einem Wörterbuch verwendet werden, während Tupel.

1

Wenn Sie eine Lösung finden, die mit Tupeln arbeitet, verwenden Sie sie, da sie die Unveränderlichkeit erzwingt, die Sie auf einen funktionelleren Weg bringt. Sie bedauern fast nie, den funktionalen/unveränderlichen Weg hinunterzugehen.

3

Immer, wenn ich eine Sammlung von Elementen an eine Funktion übergeben muss, wenn die Funktion die übergebenen Werte nicht ändern soll - ich verwende Tupel.

Sonst, wenn ich die Funktion haben möchte, um die Werte zu ändern, verwende ich Liste.

Immer, wenn Sie externe Bibliotheken verwenden und eine Liste von Werten an eine Funktion übergeben müssen und sich über die Integrität der Daten nicht sicher sind, verwenden Sie ein Tupel.

7

Der Begriff der Tupeln sind sehr ausdrucksvoll:

  • Pragmatisch, sie sind ideal für Ein- und Auspacken Werte (x,y=coord).

  • In Kombination mit Dictionaries (Hashtabellen) ermöglichen sie Formen der Zuordnung, die sonst viele Assoziationsebenen erfordern würden. Betrachten Sie zum Beispiel die Markierung, dass (x, y) gefunden wurde.

    // 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 
    
  • Listen sollten (die verschiedenen Erwähnungen von Unveränderlichkeit daher) mit der Erwartung von Operationen auf dessen Inhalt verwendet werden. Man will Pop, Push, Splice, Slice, Suche, Einfügen vor, Einfügen nach usw. mit einer Liste.

  • Tupel sollten eine Low-Level-Repräsentation eines Objekts sein, wo einfache Vergleiche gemacht werden, oder Operationen wie das Extrahieren des n-ten Elements oder n Elemente in einer vorhersagbaren Weise, wie zum Beispiel das Koordinatenbeispiel.

  • Schließlich sind Listen nicht hashbar, daher muss die Art der Zuordnung mit Dictionaries (Hash-Tabellen in Perl, assoziative Arrays in PHP) mit Tupeln erfolgen.

    Hier ist ein einfaches Beispiel von Tupeln und Wörterbücher, endlich zusammen:

    """ 
    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] ist eine Liste, in der man hinzufügen oder Elemente löschen.
(1, 2, 3) ist ein Tupel, in dem einmal definiert, kann keine Änderung vorgenommen werden.

1

[1,2,3] ist eine Liste.

(1,2,3) ist ein Tupel und unveränderlich.

2

Öffnen Sie eine Konsole und führen Sie Python. Try this:

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

Wie Sie die letzten die folgenden Methoden in der letzten Zeile Liste können: 'append', 'count', 'verlängern', 'index', 'Insert', ' pop‘, 'entfernen', 'Reverse', 'Art'

versuchen nun das gleiche für Tupel:

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

Nur 'count' und 'index' aus der Liste Methoden erscheint hier.

Dies liegt daran, Tupel sind unveränderlich und sie unterstützen keine Änderungen. Stattdessen sind sie einfacher und schneller in der internen Implementierung.

0

(1,2,3) ist ein Tupel, während [1,2,3] eine Liste ist. Ein Tupel ist ein unveränderliches Objekt, während eine Liste änderbar ist.

0

(1,2,3) ist ein Tupel und [1,2,3] ist eine Liste. Sie stellen beide Zahlenfolgen dar, beachten Sie jedoch, dass Tupel unveränderlich sind und Liste veränderbare Python-Objekte sind.

0
  • könnte ein Tupel einen Schlüssel im Wörterbuch dar, weil es unveränderlich ist.
  • Verwenden Sie Listen, wenn Sie eine Sammlung von Daten haben, die nicht Random Access benötigt.