Datenstrukturen in Python – Vollständiger Leitfaden

Veröffentlicht: 2021-06-14

Inhaltsverzeichnis

Was ist Datenstruktur?

Datenstruktur bezieht sich auf die rechnerische Speicherung von Daten für eine effiziente Verwendung. Es speichert die Daten so, dass sie leicht geändert und abgerufen werden können. Es bezieht sich kollektiv auf die Datenwerte, die Beziehung zwischen ihnen und die Operationen, die mit den Daten durchgeführt werden können. Die Bedeutung der Datenstruktur liegt in ihrer Anwendung für die Entwicklung von Computerprogrammen. Da Computerprogramme stark auf Daten angewiesen sind, ist die richtige Anordnung der Daten für einen einfachen Zugriff von größter Bedeutung für jedes Programm oder jede Software.

Die vier Hauptfunktionen einer Datenstruktur sind

  • Um Informationen einzugeben
  • Um die Informationen zu verarbeiten
  • Um die Informationen zu pflegen
  • Um die Informationen abzurufen

Arten von Datenstrukturen in Python

Mehrere Datenstrukturen werden von Python für den einfachen Zugriff und die Speicherung von Daten unterstützt. Python-Datenstrukturtypen können als primitive und nicht-primitive Datentypen klassifiziert werden. Zu den ersteren Datentypen gehören Integers, Float, Strings und Boolean, während der letztere Arrays, Listen, Tupel, Wörterbücher, Sätze und Dateien sind. Daher sind Datenstrukturen in Python sowohl eingebaute Datenstrukturen als auch benutzerdefinierte Datenstrukturen. Die eingebaute Datenstruktur wird als nicht-primitive Datenstruktur bezeichnet.

Eingebaute Datenstrukturen

Python verfügt über mehrere Datenstrukturen, die als Container für die Speicherung anderer Daten dienen. Diese Python-Datenstrukturen sind Listen, Wörterbücher, Tupel und Sätze.

Benutzerdefinierte Datenstrukturen

Diese Datenstrukturen können mit der gleichen Funktion wie die integrierten Datenstrukturen in Python programmiert werden . Die benutzerdefinierten Datenstrukturen sind: Linked List, Stack, Queue, Tree, Graph und Hashmap.

Liste der eingebauten Datenstrukturen und Erklärung

1. Liste

Die in einer Liste gespeicherten Daten sind sequentiell angeordnet und von unterschiedlichen Datentypen. Allen Daten wird eine Adresse zugewiesen, die als Index bekannt ist. Der Indexwert beginnt mit 0 und geht bis zum letzten Element. Dies wird als positiver Index bezeichnet. Ein negativer Index liegt auch vor, wenn umgekehrt auf die Elemente zugegriffen wird. Dies wird als negative Indizierung bezeichnet.

Listenerstellung

Die Liste wird als eckige Klammern erstellt. Elemente können dann entsprechend hinzugefügt werden. Es kann innerhalb der eckigen Klammern hinzugefügt werden, um eine Liste zu erstellen. Wenn keine Elemente hinzugefügt werden, wird eine leere Liste erstellt. Andernfalls werden die Elemente in der Liste erstellt.

Eingang

my_list = [] #Leere Liste erstellen

print(meine_liste)

my_list = [1, 2, 3, 'example', 3.132] #erstelle Liste mit Daten

print(meine_liste)

Ausgabe

[]

[1, 2, 3, 'Beispiel', 3.132]

Hinzufügen von Elementen innerhalb einer Liste

Für das Hinzufügen von Elementen innerhalb einer Liste werden drei Funktionen verwendet. Diese Funktionen sind append(), extend() und insert().

  • Alle Elemente werden mit der Funktion append() als einzelnes Element hinzugefügt.
  • Um Elemente einzeln in die Liste einzufügen, wird die Funktion extend() verwendet.
  • Um Elemente nach ihrem Indexwert hinzuzufügen, wird die Funktion insert() verwendet.
Eingang

meine_liste = [1, 2, 3]

print(meine_liste)

my_list.append([555, 12]) #add als einzelnes Element

print(meine_liste)

my_list.extend([234, 'more_example']) #als verschiedene Elemente hinzufügen

print(meine_liste)

my_list.insert(1, 'insert_example') #element hinzufügen i

print(meine_liste)

Ausgabe:

[1, 2, 3]

[1, 2, 3, [555, 12]]

[1, 2, 3, [555, 12], 234, 'more_example']

[1, 'insert_example', 2, 3, [555, 12], 234, 'more_example']

Löschen von Elementen innerhalb einer Liste

Ein eingebautes Schlüsselwort „del“ in Python wird verwendet, um ein Element aus der Liste zu löschen. Diese Funktion gibt jedoch das gelöschte Element nicht zurück.

  • Zur Rückgabe eines gelöschten Elements wird die Funktion pop() verwendet. Es verwendet den Indexwert des zu löschenden Elements.
  • Die Funktion remove() wird verwendet, um ein Element anhand seines Wertes zu löschen.

Ausgabe:

[1, 2, 3, 'Beispiel', 3.132, 30]

[1, 2, 3, 3.132, 30]

Geplatztes Element: 2 Verbleibende Liste: [1, 3, 3.132, 30]

[]

Bewertung von Elementen in einer Liste

  • Die Bewertung des Elements in einer Liste ist einfach. Beim Drucken der Liste werden die Elemente direkt angezeigt.
  • Spezifische Elemente können durch Übergabe des Indexwertes bewertet werden.

Ausgabe:

1

2

3

Beispiel

3.132

10

30

[1, 2, 3, 'Beispiel', 3.132, 10, 30]

Beispiel

[1, 2]

[30, 10, 3.132, 'Beispiel', 3, 2, 1]

Zusätzlich zu den oben genannten Operationen stehen in Python mehrere andere eingebaute Funktionen zum Arbeiten mit Listen zur Verfügung.

  • len(): Die Funktion wird verwendet, um die Länge der Liste zurückzugeben.
  • index(): Diese Funktion ermöglicht es dem Benutzer, den Indexwert eines übergebenen Werts zu erfahren.
  • Die Funktion count() wird verwendet, um die Anzahl der an sie übergebenen Werte zu ermitteln.
  • sort() sortiert den Wert in einer Liste und modifiziert die Liste.
  • sorted() sortiert den Wert in einer Liste und gibt die Liste zurück.

Ausgabe

6

3

2

[1, 2, 3, 10, 10, 30]

[30, 10, 10, 3, 2, 1]

2. Wörterbuch

Dictionary ist eine Art von Datenstruktur, in der Schlüssel-Wert-Paare statt einzelner Elemente gespeichert werden. Dies kann am Beispiel eines Telefonverzeichnisses erklärt werden, das alle Nummern von Einzelpersonen zusammen mit ihren Telefonnummern enthält. Der Name und die Telefonnummer definieren hier die konstanten Werte, die der „Schlüssel“ sind, und die Nummern und Namen aller Personen als die Werte für diesen Schlüssel. Durch die Bewertung eines Schlüssels erhalten Sie Zugriff auf alle in diesem Schlüssel gespeicherten Werte. Diese definierte Schlüsselwertstruktur in Python wird als Wörterbuch bezeichnet.

Erstellung eines Wörterbuchs

  • Die Blumenklammern im Leerlauf der dict()-Funktion können zum Erstellen eines Wörterbuchs verwendet werden.
  • Die Schlüssel-Wert-Paare müssen beim Erstellen eines Wörterbuchs hinzugefügt werden.

Änderung in Schlüssel-Wert-Paaren

Alle Änderungen im Wörterbuch können nur über den Schlüssel vorgenommen werden. Daher sollte zuerst auf die Schlüssel zugegriffen werden und dann die Änderungen durchgeführt werden.

Eingang

my_dict = {'First': 'Python', 'Second': 'Java'} print(my_dict) my_dict['Second'] = 'C++' #änderndes Element print(my_dict) my_dict['Third'] = 'Ruby' #Schlüssel-Wert-Paar hinzufügen print(my_dict)

Ausgabe:
{'Erster': 'Python', 'Zweiter': 'Java'}
{'Erster': 'Python', 'Zweiter': 'C++'}
{'Erster': 'Python', 'Zweiter': 'C++', 'Dritter': 'Ruby'}


Löschen eines Wörterbuchs
Eine clear()-Funktion wird verwendet, um das gesamte Wörterbuch zu löschen. Das Wörterbuch kann über die Schlüssel mit der Funktion get() oder durch Übergabe der Schlüsselwerte ausgewertet werden.

Eingang

dict = {'Monat': 'Januar', 'Saison': 'Winter'}

print(dict['First'])

print(dict.get('Second')

Ausgabe

Januar

Winter

Andere Funktionen, die einem Wörterbuch zugeordnet sind, sind keys(), values() und items().

3. Tupel

Ähnlich wie die Liste sind Tupel Datenspeicherlisten, aber der einzige Unterschied besteht darin, dass die in einem Tupel gespeicherten Daten nicht geändert werden können. Wenn die Daten innerhalb eines Tupels veränderlich sind, ist es nur dann möglich, die Daten zu ändern.

  • Tupel können mit der Funktion tuple() erstellt werden.

Eingang

new_tuple = (10, 20, 30, 40)

print(new_tuple)

Ausgabe

(10, 20, 30, 40)

  • Elemente in einem Tupel können auf die gleiche Weise bewertet werden wie Elemente in einer Liste.

Eingang

new_tuple2 = (10, 20, 30, 'Alter')

für x in new_tuple2:

drucken(x)

print(new_tuple2)

print(new_tuple2[0])

Ausgabe

10

20

30

Zeitalter

(10, 20, 30, 'Alter')

10

  • Der Operator '+' wird verwendet, um ein weiteres Tupel anzuhängen

Eingang

Tupel = (1, 2, 3)

Tupel = Tupel + (4, 5, 6

drucken (Tupel)

Ausgabe

(1, 2, 3, 4, 5, 6)

4. Einstellen

Die Satzdatenstruktur ähnelt den arithmetischen Sätzen. Es ist im Grunde die Sammlung einzigartiger Elemente. Wenn sich die Daten ständig wiederholen, erwägen Sätze, dieses Element nur einmal hinzuzufügen.

  • Ein Set kann erstellt werden, indem man ihm einfach die Werte innerhalb von Blumenklammern übergibt.

Eingang

satz = {10, 20, 30, 40, 40, 40}

drucken (einstellen)

Ausgabe

{10, 20, 30, 40}

  • Die Funktion add() kann verwendet werden, um Elemente zu einer Menge hinzuzufügen.
  • Um Daten aus zwei Sätzen zu kombinieren, kann die Funktion union() verwendet werden.
  • Um die Daten zu identifizieren, die in beiden Sätzen vorhanden sind, wird die Funktion crossing() verwendet.
  • Die Funktion difference() gibt nur die Daten aus, die für den Satz eindeutig sind, und entfernt die gemeinsamen Daten.
  • Die Funktion symmetric_difference() gibt die Daten aus, die für beide Sätze eindeutig sind.

Liste benutzerdefinierter Datenstrukturen und Erklärung

1. Stapel

Ein Stack ist eine lineare Struktur, die entweder eine Last-in-First-out- (LIFO) oder eine First-in-last-out-Struktur (FIFO) ist. Im Stack gibt es zwei Hauptoperationen, nämlich Push und Pop. Push bedeutet das Anhängen eines Elements an den Anfang der Liste, während Pop das Entfernen eines Elements vom Ende des Stapels bedeutet. Der Prozess ist in Abbildung 1 gut beschrieben.

Nützlichkeit des Stapels

  • Vorherige Elemente können durch Rückwärtsverfolgung bewertet werden.
  • Abgleich von rekursiven Elementen.

Quelle

Abbildung 1: Grafische Darstellung von Stack

Beispiel

Ausgabe

['erster zweiter Dritter']

['erster zweiter Dritter Vierter Fünfter']

fünfte

['Erstens Zweitens Drittens Viertens']

2. Warteschlange

Ähnlich wie die Stapel ist eine Warteschlange eine lineare Struktur, die das Einfügen eines Elements an einem Ende und das Löschen am anderen Ende ermöglicht. Die beiden Operationen sind als Enqueue und Dequeue bekannt. Das neu hinzugefügte Element wird wie die Stapel zuerst entfernt. Eine grafische Darstellung der Warteschlange ist in Abbildung 2 dargestellt. Einer der Hauptzwecke einer Warteschlange ist die Verarbeitung von Dingen, sobald sie eintreten.

Quelle

Abbildung 2 : Grafische Darstellung von Warteschlangen

Beispiel

Ausgabe

['erster zweiter Dritter']

['erster zweiter Dritter Vierter Fünfter']

Erste

fünfte

['zweite', 'dritte', 'vierte', 'fünfte']

3. Baum

Bäume sind nichtlineare und hierarchische Datenstrukturen, die aus Knoten bestehen, die durch Kanten verbunden sind. Die Datenstruktur des Python-Baums hat einen Stammknoten, einen übergeordneten Knoten und einen untergeordneten Knoten. Die Wurzel ist das oberste Element einer Datenstruktur. Ein Binärbaum ist eine Struktur, in der Elemente nicht mehr als zwei untergeordnete Knoten haben.

Die Nützlichkeit eines Baumes

  • Zeigt die strukturellen Beziehungen der Datenelemente an.
  • Durchlaufen Sie jeden Knoten effizient
  • Die Benutzer können die Daten einfügen, suchen, abrufen und löschen.
  • Flexible Datenstrukturen

Abbildung 3: Grafische Darstellung eines Baums

Quelle

Beispiel:

Ausgabe

Zuerst

Sekunde

Dritter

4. Grafik

Eine weitere nichtlineare Datenstruktur in Python ist der Graph, der aus Knoten und Kanten besteht. Grafisch zeigt es eine Reihe von Objekten an, wobei einige Objekte durch Verknüpfungen verbunden sind. Die Scheitelpunkte sind miteinander verbundene Objekte, während die Verbindungen als Kanten bezeichnet werden. Die Darstellung eines Graphen kann über die Dictionary-Datenstruktur von Python erfolgen, wobei der Schlüssel die Scheitelpunkte und die Werte die Kanten darstellen.

Grundlegende Operationen, die auf Diagrammen ausgeführt werden können

  • Scheitelpunkte und Kanten von Diagrammen anzeigen.
  • Hinzufügen eines Scheitelpunkts.
  • Hinzufügung einer Kante.
  • Erstellen eines Diagramms

Die Nützlichkeit eines Diagramms

  • Die Darstellung eines Graphen ist leicht verständlich und nachvollziehbar.
  • Es ist eine großartige Struktur, um verknüpfte Beziehungen darzustellen, z. B. Facebook-Freunde.

Abbildung 4: Grafische Darstellung eines Diagramms

Quelle

Beispiel

g = Grafik(4)

g.Kante(0, 2)

g.Kante(1, 3)

g.Kante(3, 2)

g.Kante(0, 3)

g.__repr__()

Ausgabe

Adjazenzliste von Knoten 0

Kopf -> 3 -> 2

Adjazenzliste von Knoten 1

Kopf -> 3

Adjazenzliste von Knoten 2

Kopf -> 3 -> 0

Adjazenzliste von Knoten 3

Kopf -> 0 -> 2 -> 1

5. Hashmap

Hashmaps sind indizierte Python-Datenstrukturen, die für die Speicherung von Schlüssel-Wert-Paaren nützlich sind. In Hashmaps gespeicherte Daten werden über die Schlüssel abgerufen, die mit Hilfe einer Hash-Funktion berechnet werden. Diese Arten von Datenstrukturen sind nützlich für die Speicherung von Schülerdaten, Kundendaten usw. Wörterbücher in Python sind ein Beispiel für Hashmaps.

Beispiel

Ausgabe

0 -> zuerst

1 -> Sekunde

2 -> dritte

0 -> zuerst

1 -> Sekunde

2 -> dritte

3 -> Vierter

0 -> zuerst

1 -> Sekunde

2 -> dritte

Nützlichkeit

  • Es ist die flexibelste und zuverlässigste Methode zum Abrufen von Informationen als andere Datenstrukturen.

6. Verknüpfte Liste

Es ist eine Art lineare Datenstruktur. Im Grunde handelt es sich um eine Reihe von Datenelementen, die durch Links in Python miteinander verbunden sind. Elemente in einer verknüpften Liste sind durch Zeiger verbunden. Der erste Knoten dieser Datenstruktur wird als Header und der letzte Knoten als Tail bezeichnet. Daher besteht eine verkettete Liste aus Knoten mit Werten, und jeder Knoten besteht aus einem Zeiger, der mit einem anderen Knoten verbunden ist.

Die Nützlichkeit verknüpfter Listen

  • Im Vergleich zu einem festen Array ist eine verkettete Liste eine dynamische Form der Dateneingabe. Speicher wird eingespart, da er den Speicher der Knoten zuweist. In einem Array muss die Größe vordefiniert werden, was zu Speicherverschwendung führt.
  • Eine verknüpfte Liste kann überall im Speicher gespeichert werden. Ein verknüpfter Listenknoten kann aktualisiert und an einen anderen Ort verschoben werden.

Abbildung 6: Grafische Darstellung einer verknüpften Liste

Quelle

Beispiel

Ausgabe:

['erster zweiter Dritter']

['erster', 'zweiter', 'dritter', 'sechster', 'vierter', 'fünfter']

['erster', 'dritter', 'sechster', 'vierter', 'fünfter']

Fazit

Die verschiedenen Arten von Datenstrukturen in Python wurden untersucht. Ob Anfänger oder Experte, die Datenstrukturen und Algorithmen sind nicht zu übersehen. Bei der Durchführung beliebiger Operationen an den Daten spielen die Konzepte der Datenstrukturen eine entscheidende Rolle. Die Datenstrukturen helfen bei der organisierten Speicherung der Informationen, während die Algorithmen bei der Führung durch die Datenanalyse helfen. Daher unterstützen sowohl die Python-Datenstrukturen als auch die Algorithmen den Informatiker oder andere Benutzer bei der Verarbeitung ihrer Daten.

Wenn Sie mehr über Datenstrukturen erfahren möchten, schauen Sie sich das Executive PG Program in Data Science von IIIT-B & upGrad an, das für Berufstätige entwickelt wurde und mehr als 10 Fallstudien und Projekte, praktische Workshops, Mentoring mit Branchenexperten, 1 -on-1 mit Branchenmentoren, mehr als 400 Stunden Lern- und Jobunterstützung bei Top-Unternehmen.

Welche Datenstruktur ist in Python schneller?

In Wörterbüchern sind Suchen schneller, da Python Hash-Tabellen verwendet, um sie zu implementieren. Wenn wir Big-O-Konzepte verwenden, um die Unterscheidung zu veranschaulichen, besitzen Wörterbücher eine konstante Zeitkomplexität, O(1), während Listen eine lineare Zeitkomplexität, O(n), haben.

In Python sind Wörterbücher der schnellste Weg, um häufig Daten mit Tausenden von Einträgen nachzuschlagen. Wörterbücher sind hochgradig optimiert, da sie der integrierte Zuordnungstyp in Python sind. In Wörterbüchern und Listen gibt es jedoch einen gemeinsamen Raum-Zeit-Kompromiss. Es weist darauf hin, dass wir zwar die für unseren Ansatz erforderliche Zeit reduzieren können, aber mehr Speicherplatz verwenden müssen.

In Listen müssen Sie die vollständige Liste durchgehen, um das zu bekommen, was Sie wollen. Ein Wörterbuch hingegen gibt den gesuchten Wert zurück, ohne alle Schlüssel zu durchsuchen.

Was ist schneller in Python list oder array?

Im Allgemeinen sind Python-Listen unglaublich flexibel und können völlig heterogene, zufällige Daten enthalten sowie schnell und in ungefähr konstanter Zeit angehängt werden. Sie sind der richtige Weg, wenn Sie Ihre Liste schnell und problemlos verkleinern und erweitern müssen. Sie nehmen jedoch viel mehr Platz ein als Arrays, teilweise weil jedes Element in der Liste die Erstellung eines separaten Python-Objekts erfordert.

Andererseits ist der Typ array.array im Wesentlichen ein dünner Wrapper um C-Arrays. Es kann nur homogene Daten (d. h. Daten des gleichen Typs) übertragen, daher ist der Speicher auf die Größe von (einem Objekt) * Länge Bytes beschränkt.

Was ist der Unterschied zwischen NumPy-Array und Liste?

Numpy ist das Kernpaket für wissenschaftliche Berechnungen von Python. Es verwendet ein großes mehrdimensionales Array-Objekt sowie Dienstprogramme für deren Bearbeitung. Ein numpy-Array ist ein Raster aus Werten identischen Typs, die durch ein Tupel nicht negativer Ganzzahlen indiziert sind.

Listen wurden in die Python-Kernbibliothek aufgenommen. Eine Liste ähnelt einem Array in Python, kann jedoch in der Größe geändert werden und Elemente verschiedener Typen enthalten. Was ist hier der wirkliche Unterschied? Leistung ist die Antwort. Numpy-Datenstrukturen sind in Bezug auf Größe, Leistung und Funktionalität effizienter.