Arrays in Python erklärt!
Wenn Sie mit dem Programmieren beginnen oder etwas über Python lernen, ist dieser Artikel genau das Richtige für Sie. Arrays gehören zu den am häufigsten verwendeten Datenstrukturen. Wie stellt Python Arrays dar? Wie können wir Arrays in Python manipulieren, um verschiedene Probleme zu lösen? Das werden wir in diesem Artikel herausfinden.
Wie speichern Computer Informationen?
Wie Sie wissen, besteht die primäre Form von Informationen in einem Computer aus Informationsbits . 8 Bits dieser Informationen werden dann zu einem sogenannten Byte zusammengefasst .
Da Computer sehr große Teile dieser Bytes speichern können, benötigen sie einen neuen Mechanismus, der es ihnen ermöglicht, Bytes schnell zu lesen und zu schreiben. Hier kommen Speicheradressen ins Spiel, genau wie Ihre persönliche Privatadresse Ihren Wohnort von Ihrem Nachbarn unterscheidet Computer verwenden Speicheradressen, um zu unterscheiden, wo sich verschiedene Daten und Informationen befinden.
Erwähnenswert ist auch, dass der Computer O(1)-Zugriffszeit benötigt, um eine beliebige Speicheradresse zu erreichen. Das bedeutet, dass der Zugriff auf Byte Nr. 5489637 dasselbe ist wie der Zugriff auf Byte Nr. 64.
Was sind Arrays?
In Programmiersprachen ist es üblich, Variablen zu verwenden, um auf eine Adresse in einem Speicher zu verweisen. Bezeichner X kann sich beispielsweise auf Byte Nr. 32 beziehen.
Wenn wir mehrere Speicheradressen speichern möchten, ist die Erstellung mehrerer Identifikatoren nicht effizient und skalierbar. Wir würden es vorziehen, wenn wir einen Namen für die Gruppe von Bezeichnern hätten und Zahlen verwenden würden, um auf bestimmte Bezeichner zuzugreifen. Eine solche Darstellung ist ein Array, mit anderen Worten, es handelt sich um eine Darstellung einer Gruppe von Variablen in einem zusammenhängenden Teil des Computerspeichers.
Zeichenfolgen in Python werden beispielsweise auf diese Weise gespeichert. Nehmen wir an, Sie deklarieren eine neue Variable mit dem Text „Beispiel“, den Python zuordnen wird:
2 Byte (zum Speichern eines Unicode-Zeichens benötigter Speicher) * 7 (Anzahl der Zeichen im Wortbeispiel) = 14 Byte zusammenhängender Speicher zum Speichern dieser Variablen.
Referenzielle Arrays
Python verwendet eine andere Art von Arrays, bei denen es sich um referenzielle Arrays handelt. Um sie zu verstehen, werfen wir einen Blick auf dieses Beispiel. Nehmen wir an, Sie besitzen ein Hotel und haben 50 Zimmer. Sie benötigen eine Möglichkeit, den Namen der Personen zu speichern, die sich in welchem Zimmer aufhalten eine Darstellung wie die folgende:
Um dies zu tun, muss Python die Bedingung des zusammenhängenden Speicherplatzes respektieren, der zugewiesen werden muss. Aber wie geht das, wenn die Namen unterschiedlich lang sind (unterschiedliche Längen bedeuten unterschiedlichen Platzbedarf)?
Eine Lösung wäre, die Länge der größten Zeichenfolge zu ermitteln und genügend Speicherplatz für alle zuzuweisen. Dies ist jedoch nicht speichereffizient, da etwas Speicherplatz verschwendet wird. Was passiert, wenn eine neue Zeichenfolge hinzukommt, die jetzt die größte Zeichenfolge ist?
Um dieses Problem zu lösen, erstellt Python ein Array zusammenhängender Verweise auf mehrere Objekte. Obwohl die Größe jedes einzelnen Objekts variieren kann, ist der zum Speichern seiner Speicheradresse verwendete Speicher derselbe. Auf diese Weise garantiert Python eine konstante Zugriffszeit auf verschiedene Elemente des Arrays. Wir bezeichnen diesen Array-Typ als referenzielles Array.
Um dies zu veranschaulichen, schauen Sie sich dieses Bild an:
Listen und Tupel in Python verwenden diesen Array-Typ zum Speichern von Daten.
Hinweis: Da referenzielle Arrays auf Referenzen verweisen, sollten Sie beim Ändern von Referenzwerten vorsichtig sein, da Sie auch versehentlich Werte in Listen ändern können. Stellen Sie außerdem beim Erstellen von Kopien sicher, dass Sie den Unterschied zwischen flacher und tiefer Kopie kennen .
Kompakte Arrays
Zuvor haben wir über Strings gesprochen und wie wir sie in einem Array zusammenhängenden Speichers speichern. Tatsächlich nennen wir dieses Array ein kompaktes Array.
Ein Vorteil der Verwendung kompakter Arrays gegenüber referenziellen Arrays besteht darin, dass kein zusätzlicher Aufwand durch das Speichern von Speicherreferenzen entsteht. Wir speichern die Primärdaten direkt. Ein weiterer erwähnenswerter Vorteil besteht darin, dass Python bei Verwendung einer Liste, die ein referenzielles Array ist, keine Kontrolle darüber hat, wo Ihre Daten gespeichert werden, obwohl die Liste Verweise darauf enthält, wo sich die Daten befinden. Aufgrund der Funktionsweise der Hardware ist es effizienter, die Daten nahe beieinander zu haben, da sie möglicherweise für dieselbe Berechnung verwendet werden.
Trotz dieser Vorteile verwendet Python für Listen und Tupel referenzielle Arrays, da diese bequem zu verwenden sind. Wenn Sie jedoch darauf bestehen, ein kompaktes Array zu verwenden, stellt Ihnen Python ein Modul namens Array zur Verfügung, mit dem Sie dies tun können:
Hier ist Ihnen aufgefallen, dass wir i als erstes Argument an übergeben haben array. Denn um ein kompaktes Array zu erstellen, müssen wir den Typ für die richtige Speicherzuweisung angeben. Weitere Datentypen finden Sie in dieser Tabelle:
Wenn Sie mehr über Array-Module erfahren möchten, klicken Sie hier .
Ein Nachteil des Array-Moduls besteht darin, dass es keine benutzerdefinierten Datentypen unterstützt. Kompakte Arrays mit einer solchen Datenstruktur können mit dem Modul ctypes definiert werden .
Dynamische Arrays
Beim Erstellen eines kompakten Arrays geben wir die genaue Größe dieses Arrays an, damit der Computer weiß, welchen Speicher er zuweisen muss. Weil dadurch benachbarte Speicherbereiche anderen Arrays zugewiesen werden.
In der Praxis können wir die Größe unserer Arrays nicht immer kennen, da sie sich mit der Zeit möglicherweise vergrößern. Als Lösung für dieses Problem bietet Python eine Abstraktion namens Dynamic Array.
Diese Abstraktion verwendet eine Listeninstanz, die ein zugrunde liegendes Array verwaltet, dessen Kapazität größer ist als die Länge der tatsächlichen Liste. Diese zusätzliche Kapazität hilft uns, der Liste immer mehr Daten hinzuzufügen.
Wenn wir schließlich die zusätzliche Kapazität erschöpfen, fordert Dynamic Array ein neues größeres Array an und kopiert alle Elemente in das neue Array und das System gewinnt den Platz vom alten Array zurück.
Python List basiert auf dieser Abstraktion, aber Tupel und Strings sind unveränderlich (können nicht geändert werden) und basieren daher nicht darauf.
Erwähnenswert ist auch, dass das dynamische Array nicht nur größer wird, sondern auch kleiner werden kann, wenn wir Elemente aus der Liste löschen.
Listen und Tupel
Aus der Analyse, die wir im obigen Abschnitt durchgeführt haben, können wir die Lists & Tuples-Methoden in zwei Arten von Methoden unterteilen:
Unveränderliche Methoden: Methoden, die sowohl in Tupeln als auch in Listen vorhanden sind und deren Inhalt nicht ändern. Nachfolgend finden Sie eine Tabelle dieser Methoden und ihrer zeitlichen Komplexität:
Mutierende Methoden: Methoden, die nur in Listen existieren, da sie die zugrunde liegenden Daten und die Struktur der Liste ändern. Nachfolgend finden Sie eine Tabelle dieser Methoden und ihrer zeitlichen Komplexität:
Wir haben hier nicht besprochen, was die einzelnen Methoden bewirken (sie ist intuitiv und einfach), aber Sie können mehr über Python- Listen und -Tupel erfahren .
Imbissbuden
- Referenzielle Arrays speichern Referenzen in ihrem Array-Speicher und greifen dann über die Referenzen auf die tatsächlichen Werte zu.
- Kompakte Arrays speichern die eigentlichen Daten in einem zusammenhängenden Speicher.
- Dynamische Arrays sind Arrays, die je nach Anzahl der darin enthaltenen Elemente automatisch erweitert und verkleinert werden.
- Listen basieren auf referenziellen und dynamischen Arrays.
- Tupel basieren auf referenziellen Arrays.
- Strings basieren auf kompakten Arrays.
LinkedIn:https://www.linkedin.com/in/mohamed-aziz-belaweid/
GitHub:https://github.com/azayz
Lesen Sie meine anderen Geschichten:
REALM: Retrieval Augmented Language Model Pretraining Gesichtsemotionserkennung, praktischer Leitfaden!Abonnieren Sie und erhalten Sie eine Benachrichtigung, wenn ich etwas poste:

![Was ist überhaupt eine verknüpfte Liste? [Teil 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































