In diesem Leitfaden erfahren Sie, wie Sie Ähnlichkeiten und Unterschiede zwischen Python Tupel und Listen. Sie werden auch verstehen, wann Sie ein Tupel verwenden sollten.
Liste und Tupel sind beides eingebaute Datenstrukturen in Python. Sie können verwendet werden, um eine Sammlung von Elementen zu speichern.
Von der Unterstützung für Indizierung und Slicing bis zur Aufnahme heterogener Datentypen, Tupel und Listen können scheinbar ähnliche Funktionen haben. Die Kenntnis der Gemeinsamkeiten und Unterschiede zwischen den beiden kann Ihnen daher bei der Entscheidung helfen, welche Datenstruktur Sie verwenden sollten.
Fangen wir an.
👩🏽💻 Sie können eine Python-REPL starten und diesem Tutorial folgen. Sie können auch Der Online-Python-Editor von Geekflare zu codieren.
Python Tupel vs. Liste: Was sind die Gemeinsamkeiten?
Beginnen wir damit, die Gemeinsamkeiten zwischen Listen und Tupeln kennen zu lernen. Um das Lernen zu erleichtern, stellen wir Beispiele sowohl für Listen als auch für Tupel vor.

#1. Python Iterables
In Python werden Listen von einem Paar von Platz Klammern, während Tupel in Klammern eingeschlossen sind. Sie können ein Tupel auch als eine durch Kommas getrennte Menge von Werten erstellen - ohne die Klammern.
Beides sind Iterables; man kann sie also in einer Schleife durchlaufen, indem man eine for
Schleife.
Die nachstehende Codezelle zeigt, wie man eine Liste durchläuft.
nums = [2,6,7,10]
print(f"Type of nums is {type(nums)}")
for num in nums:
print(num)
# Output
Type of nums is <class 'list'>
2
6
7
10
Wie im Folgenden erläutert, können Sie ein Tupel auch in einer Schleife durchlaufen
nums = (2,6,7,10)
# Note: nums = 2,6,7,10 is a valid tuple as well. If needed, run a quick check!
print(f"Type of nums is {type(nums)}")
for num in nums:
print(num)
# Output
Type of nums is <class 'tuple'>
2
6
7
10
#2. Unterstützung für die Erstellung aus anderen Sequenzen
Die nächste Ähnlichkeit zwischen Listen und Tupeln besteht darin, dass sie aus vorhandenen Sequenzen wie Zeichenketten erstellt werden können.
sample_str = "Coding!"
Die folgende Codezelle zeigt, wie list(string)
gibt eine Liste zurück, deren Listenelemente die Zeichen in der Zeichenkette sind.
list_from_str = list(sample_str)
print(list_from_str)
# Output
['C', 'o', 'd', 'i', 'n', 'g', '!']
In ähnlicher Weise kann ein Tupel aus einer Zeichenkette oder einer anderen Sequenz erstellt werden, indem tuple(sequence)
. Die nachstehende Code-Zelle zeigt, wie Sie dies tun können.
tuple_from_str = tuple(sample_str)
print(tuple_from_str)
# Output
('C', 'o', 'd', 'i', 'n', 'g', '!')
#3. Unterstützung für Indizierung und Slicing
Python unterstützt die Null-Indizierung, bei der das erste Element auf dem Index Null steht, das zweite auf dem Index Eins und so weiter. Python unterstützt auch die negative Indizierung, bei der das letzte Element bei Index -1 steht, das vorletzte Element bei Index -2 usw.
list_from_str = ['C', 'o', 'd', 'i', 'n', 'g', '!']
print(list_from_str[1])
# o
Das Element bei Index -2 ist das vorletzte Element, "g".
tuple_from_str = ('C', 'o', 'd', 'i', 'n', 'g', '!')
print(tuple_from_str[-2])
# g
Sie können Slicing verwenden, wenn Sie mit einem kleinen Abschnitt der Liste oder des Tupels arbeiten wollen. list[start:end] gibt einen Ausschnitt der Liste zurück, der beim Index start beginnt und sich bis end - 1 erstreckt. Der Standardwert für start ist 0, und end ist das letzte Element in der Iterable.
Sie können Tupel mit der gleichen Syntax in Scheiben schneiden. Lassen Sie uns Slices der Liste und des Tupels erstellen, die wir zuvor erstellt haben.
list_from_str = ['C', 'o', 'd', 'i', 'n', 'g', '!']
print(list_from_str[0:5])
['C', 'o', 'd', 'i', 'n']
Zusätzlich zu den Start- und Endwerten können Sie auch einen Schrittwert angeben. tuple(start:end:step)
gibt einen Ausschnitt des Tupels aus start
bis zu end - 1
in Schritten von step
.
tuple_from_str = ('C', 'o', 'd', 'i', 'n', 'g', '!')
print(tuple_from_str[::2])
('C', 'd', 'n', '!')
Hier setzen wir den Schrittwert auf 2, so dass das Slice jedes zweite Element enthält.
#4. Sammlungen mit mehreren Datentypen
In den Beispielen, die wir betrachtet haben, waren alle Elemente der Liste und Tupel vom gleichen Datentyp.
Sie können jedoch Werte verschiedener Datentypen in einer einzigen Liste oder einem Tupel speichern.
Der folgende Codeschnipsel student_list
enthält den Namen eines Schülers als String, das Alter als Integer und die gesicherten Noten als Float.
student_list = ["John",22,96.5]
for item in student_list:
print(f"{item} is of type {type(item)}")
# Output
John is of type <class 'str'>
22 is of type <class 'int'>
96.5 is of type <class 'float'>
Ein ähnliches Beispiel können wir uns für ein Tupel ausdenken.
student_tuple = ("Jane",23,99.5)
for item in student_tuple:
print(f"{item} is of type {type(item)}")
# Output
Jane is of type <class 'str'>
23 is of type <class 'int'>
99.5 is of type <class 'float'>
#5. Unterstützung für Mitgliedschaftsprüfungen
Sowohl bei Listen als auch bei Tupeln können Sie Zugehörigkeitstests auf das Vorhandensein bestimmter Elemente durchführen. Wenn Sie prüfen wollen, ob ein bestimmtes Element in einer Liste oder einem Tupel vorhanden ist, können Sie die in
Betreiber.
Der Ausdruck
item in iterable
wertet aus zuTrue
wenn dieiterable
enthält dieitem
; sonst,False
.
"Alex" in student_list
# False
"Jane" in student_tuple
# True
Bislang haben Sie die Ähnlichkeiten zwischen Listen und Tupel in Python. Als Nächstes wollen wir die wichtigsten Unterschiede zwischen den beiden Datenstrukturen kennenlernen.
Python Tupel vs. Liste: Was sind die Unterschiede?
#1. Veränderlichkeit von Listen und Unveränderlichkeit von Tupeln in Python
Der wichtigste Unterschied zwischen einer Liste und einem Tupel in Python ist, dass ein Tupel ist unveränderlich. Das bedeutet, dass Sie kann nicht ein Tupel an Ort und Stelle ändern.
▶️ Hier ist ein Beispiel.
tuple1 = ("Java","Python","C++")
tuple1[0] = "Rust"
# Output
----> 2 tuple1[0] = "Rust"
TypeError: 'tuple' object does not support item assignment
Eine Liste ist eine veränderbare Datenstruktur, d. h. wir können die Liste ändern, indem wir ein Element an einem bestimmten Index ändern, wie in der folgenden Codezelle.
list1 = ["Java","Python","C++"]
list1[0] = "Rust"
print(list1)
# Output
['Rust', 'Python', 'C++']
#2. Listen mit variabler Länge vs. Tupel mit fester Länge
Python-Liste ist eine Datenstruktur mit variabler Länge.
Sie können Folgendes tun:
- Hinzufügen eines Elements am Ende der Liste
- Hinzufügen von Elementen aus einer anderen Liste an das Ende der aktuellen Liste
- Elemente mit einem bestimmten Index aus der Liste entfernen
list1 = [2,3,4,5]
# add an item to the end
list1.append(9)
print(list1)
# add items from list2 to the end of list1
list2 = [0,7]
list1.extend(list2)
print(list1)
# remove an item from list1
list1.pop(0)
print(list1)
▶️ Die Ausgabe des obigen Codeschnipsels.
# Output
[2, 3, 4, 5, 9]
[2, 3, 4, 5, 9, 0, 7]
[3, 4, 5, 9, 0, 7]
Tupel sind Datenstrukturen mit fester Länge. Sie können also keine Elemente zu einem bestehenden Tupel hinzufügen oder aus ihm entfernen. Sie können das Tupel jedoch so umdefinieren, dass es andere Elemente enthält.
tuple1 = (2,4,6,8)
tuple1 = (1,8,9)
print(tuple1)
# Output
(1, 8, 9)
#3. Größe im Speicher
Wir werden nun auf dem aufbauen, was wir im vorherigen Abschnitt gelernt haben: die Liste ist eine variable Länge Datenstruktur.
Wenn Sie die Liste zu Beginn definieren, wird ihr eine bestimmte Größe im Speicher zugewiesen. Wenn Sie nun eine Liste mit der Funktion append()
oder extend()
Methoden sollte zusätzlicher Speicher zugewiesen werden, um die hinzugefügten Elemente zu speichern. Diese Zuweisung ist fast immer mehr als die Anzahl der Elemente, die Sie hinzufügen.
Es ist also notwendig, die Anzahl der Listenelemente und den zugewiesenen Speicherplatz im Auge zu behalten. Da Listen eine variable Länge haben, gibt es außerdem einen Zeiger, der auf die Adresse der Listenelemente zeigt. Infolgedessen können Listen der Länge k
mehr Speicherplatz benötigen als ein Tupel mit demselben k
Elemente.
Hier ist eine einfache Illustration.

Sie können die integrierte sys des Moduls getsizeof()
Methode für ein Python-Objekt, um die Größe eines Objekts im Speicher zu ermitteln.
import sys
list1 = [4,5,9,14]
list_size = sys.getsizeof(list1)
print(f"Size of list:{list_size}")
tuple1 = (4,5,9,14)
tuple_size = sys.getsizeof(tuple1)
print(f"Size of tuple:{tuple_size}")
Eine Liste benötigt bei gleicher Anzahl und gleichem Wert der Elemente mehr Speicherplatz als ein Tupel, wie die folgende Ausgabe zeigt.
# Output
Size of list:104
Size of tuple:88

Wann sollten Sie ein Python-Tupel verwenden?
Aus den Unterschieden und Ähnlichkeiten zwischen Python-Listen und Tupeln wissen Sie, dass Sie, wenn Sie eine änderbar Sammlung, sollten Sie eine Liste.
Aber wann sollte man stattdessen ein Tupel verwenden?
Wir werden das in diesem Abschnitt näher erläutern.
#1. Schreibgeschützte Sammlung
Wenn eine Sammlung unveränderlich sein soll, sollten Sie sie als Tupel definieren. Angenommen, color = (243,55,103)
ein Tupel, das die RGB-Werte enthält, die einer Farbnuance entsprechen. Die Definition von Farbe als Tupel stellt sicher, dass sie nicht verändert werden kann.
Wenn eine Sammlung schreibgeschützt sein soll, d. h. die Werte dürfen während des Programms nicht geändert werden, sollten Sie ein Tupel verwenden. Dadurch wird eine unbeabsichtigte Änderung der Werte verhindert.
#2. Wörterbuch-Tasten
Sie erstellen zum Beispiel ein Wörterbuch mit den Listenelementen key_list
als die Schlüssel. Sie können die dict.fromkeys()
Methode, um ein Wörterbuch aus einer Liste zu erstellen.
key_list = list("ABCD")
dict.fromkeys(key_list)
{'A': None, 'B': None, 'C': None, 'D': None}
Angenommen, Sie ändern die Liste so, dass sie als erstes Element "D" enthält (Index 0).vor die Erstellung des Wörterbuchs.
Was geschieht nun mit dem Wörterbuchschlüssel "A"?
Wenn Sie versuchen, ein Wörterbuch aus key_list
und auf den Wert zugreifen, der dem Schlüssel "A" entspricht, stoßen Sie auf ein KeyError
.
key_list[0] = 'D'
dict.fromkeys(key_list)['A']
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-31-c90392acc2cf> in <module>()
----> 1 dict.fromkeys(key_list)['A']
KeyError: 'A'
Die Schlüssel eines Wörterbuchs sollten eindeutig sein. Sie können also kein zweites 'D' als Schlüssel haben.
dict.fromkeys(key_list)
{'B': None, 'C': None, 'D': None} # A is no longer a key.
Wenn Sie stattdessen ein Tupel verwenden, ist eine solche Änderung nicht möglich, und die Wahrscheinlichkeit, dass Sie Fehler machen, ist geringer. Daher sollten Sie lieber ein Wörterbuch mit den Elementen eines Tupels als Schlüssel erstellen.
key_tuple = tuple("ABCD")
dict.fromkeys(key_tuple)
{'A': None, 'B': None, 'C': None, 'D': None}
key_tuple[0] = 'D'
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-12-2cecbefa7db2> in <module>()
----> 1 key_tuple[0] = 'D'
TypeError: 'tuple' object does not support item assignment
#3. Funktion Argumente
Die Unveränderlichkeit von Tupeln macht sie auch geeignet, als Funktionsargumente übergeben zu werden.
Betrachten Sie die folgende Funktion find_volume()
die das Volumen eines Quaders mit den Abmessungen Länge, Breite und Höhe angibt.
def find_volume(dimensions):
l,b,h = dimensions
return l*b*h
Angenommen, diese Dimensionen sind in einer Liste namens dimensions
. Die Aufforderung an find_volume()
mit dimensions
als Argument gibt das Volumen zurück.
dimensions = [2,8,5]
find_volume(dimensions)
80
Sie können die in einer Liste gespeicherten Abmessungen jederzeit ändern.
dimensions = [20,8,5]
find_volume(dimensions)
800
Manchmal müssen die Werte jedoch konstant bleiben und dürfen nicht verändert werden. In diesem Fall sollten Sie in Erwägung ziehen, die Argumente als Tupel zu speichern und sie im Funktionsaufruf zu verwenden.
#4. Rückgabewerte von Funktionen
In Python werden Sie in den Rückgabewerten von Funktionen auf Tupel stoßen. Wenn Sie mehrere Werte aus einer Funktion zurückgeben, gibt Python diese implizit als Tupel zurück.
Betrachten Sie die folgende Funktion return_even()
:
def return_even(num):
even = [i for i in range(num) if (i%2==0)]
return even,len(even)
- Es braucht eine Anzahl
num
als Argument - Sie gibt die Liste der geraden Zahlen im Intervall
[0,num)
und die Länge dieser Liste.
Setzen wir den Wert von num
20 und rufen Sie die Funktion auf.
num = 20
Aufruf von return_even()
gibt die beiden Werte in einem Tupel zurück. Sie können die type()
Funktion mit dem Funktionsaufruf als Prüfargument.
type(return_even(num)) # <class 'tuple'>
Sie können den Rückgabewert ausdrucken, um zu überprüfen, ob es sich um ein Tupel handelt, das die Liste der geraden Zahlen als erstes Element und die Länge der Liste als zweites Element enthält.
print(return_even(num))
([0, 2, 4, 6, 8, 10, 12, 14, 16, 18], 10)
Da das Tupel zwei Elemente enthält, können Sie sie in zwei Variablen entpacken, wie unten gezeigt.
even_nums, count = return_even(num)
print(even_nums)
print(count)
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
10
Schlussfolgerung
Ich hoffe, dass dieses Tutorial einen umfassenden Vergleich von Python Tupel vs Liste zur Verfügung gestellt.
Lassen Sie uns den Lehrgang mit einer kurzen Zusammenfassung abschließen:
- Listen und Tupel sind eingebaute Datenstrukturen in Python.
- Ähnlichkeiten: Iterables, Unterstützung für Indexierung, Slicing, verschiedene Datentypen und Operator für Mitgliedschaftstests.
- Wesentlicher Unterschied: Listen sind veränderbar, Tupel sind unveränderbar.
- Andere Unterschiede: Feste Länge der Tupel und variable Länge der Listen, kleinere Speichergröße der Tupel.
- Wann sollten Sie ein Tupel verwenden? Für unveränderliche Sammlungen, Wörterbuchschlüssel und Funktionsargumente.
Als Nächstes sehen Sie sich Python-Projekte zu üben und zu lernen. Oder Methoden lernen, um doppelte Einträge aus Python-Listen entfernen. Viel Spaß beim Lernen! Und dann viel Spaß beim Programmieren! 👩🏽💻