W3docs

Python Arrays

Lerne, wie du Python-Arrays mit dem array-Modul erstellst und verwendest: Typecodes, Indizierung, Slicing, Mutationen und wann Arrays sinnvoller als Listen sind.

Dieses Kapitel behandelt Pythons eingebautes array-Modul, das eine kompakte, typbeschränkte Sequenz zur Speicherung homogener numerischer Daten bereitstellt. Du lernst, was Typecodes sind, wie du Arrays erstellst und indizierst, wie du sie mit der vollständigen Menge verfügbarer Methoden veränderst — und vor allem, wann ein array die bessere Wahl gegenüber einer einfachen Python-Liste ist.

Was ist das array-Modul?

Pythons array-Modul stellt einen Sequenztyp bereit, der Elemente eines einzigen C-kompatiblen numerischen Typs speichert. Im Gegensatz zu einer Liste, die beliebige Objekte enthalten kann, speichert jeder Platz in einem array genau denselben primitiven Werttyp (eine ganze Zahl, eine Gleitkommazahl usw.). Diese Einschränkung macht Arrays für große Zahlensammlungen speichereffizienter als Listen.

Wichtige Punkte:

  • Im Standard-Bibliothek enthalten — keine Installation erforderlich.
  • Alle Elemente müssen denselben Typecode teilen (ein einzelnes Zeichen, das den C-Typ identifiziert).
  • Unterstützt standardmäßige Sequenzoperationen: Indizierung, Slicing, Iteration, len() und Mitgliedschaftstests mit in.
  • Nützlich, wenn du kompakten Speicher benötigst, ohne auf eine Drittanbieterbibliothek wie NumPy zurückgreifen zu müssen.

Wenn du bereits mit Python-Listen vertraut bist, stelle dir ein array als Liste vor, die Flexibilität gegen Speichereffizienz eintauscht.

Typecodes

Jedes array wird mit einem Typecode erstellt — einem einstelligen string, der Python mitteilt, welchen C-Typ für jedes Element verwendet werden soll und damit, wie viele Bytes jeder Platz belegt.

TypecodeC-TypMindestgröße in BytesTypische Verwendung
'b'signed char1Kleine ganzzahlige Werte −128 bis 127
'B'unsigned char1Kleine nicht-negative ganzzahlige Werte 0–255
'h'signed short2Mittlere ganzzahlige Werte
'H'unsigned short2Mittlere nicht-negative ganzzahlige Werte
'i'signed int2Allgemeine ganzzahlige Werte (meist 4 Bytes)
'I'unsigned int2Nicht-negative ganzzahlige Werte
'l'signed long4Größere ganzzahlige Werte
'L'unsigned long4Größere nicht-negative ganzzahlige Werte
'q'signed long long8Sehr große ganzzahlige Werte
'Q'unsigned long long8Sehr große nicht-negative ganzzahlige Werte
'f'float4Einfachgenaue Gleitkommazahl
'd'double8Doppeltgenaue Gleitkommazahl

Die tatsächliche Bytegröße kann je nach Plattform variieren. Verwende array.itemsize, um sie zur Laufzeit zu prüfen.

Hinweis zu 'u' (Unicode-Zeichen): Dieser Typecode wurde in Python 3.3 als veraltet markiert und in Python 3.13 entfernt. Verwende ihn nicht in neuem Code — nutze stattdessen str oder bytes.

Arrays erstellen

Importiere das Modul und rufe array.array(typecode, initializer) auf, wobei initializer ein beliebiges Iterable mit Werten ist, die zum gewählten Typecode kompatibel sind.

import array as arr

# Array of signed integers
int_array = arr.array('i', [1, 2, 3, 4, 5])
print(int_array)          # array('i', [1, 2, 3, 4, 5])

# Array of double-precision floats
float_array = arr.array('d', [1.1, 2.2, 3.3])
print(float_array)        # array('d', [1.1, 2.2, 3.3])

# Inspect the typecode and bytes-per-element
print(int_array.typecode)   # i
print(int_array.itemsize)   # 4  (platform-dependent)

Du kannst auch ein leeres array erstellen und es später befüllen:

import array as arr

empty = arr.array('i')   # empty integer array
empty.append(10)
empty.append(20)
print(empty)             # array('i', [10, 20])

Auf Array-Elemente zugreifen

Die Indizierung von Arrays funktioniert genau wie die Listenindizierung: nullbasiert von links, und negative Indizes zählen von rechts.

python— editable, runs on the server

Der Zugriff auf einen Index außerhalb des gültigen Bereichs löst einen IndexError aus, genau wie bei Listen.

Arrays slicen

Slicing gibt ein neues array mit demselben Typecode zurück, das die ausgewählten Elemente enthält. Die Syntax lautet a[start:stop:step] — dieselbe wie für Listen und Strings.

python— editable, runs on the server

Über ein Array iterieren

Du kannst mit einer for-Schleife über ein array iterieren oder mit in auf Mitgliedschaft prüfen:

import array as arr

a = arr.array('i', [10, 20, 30, 40, 50])

for item in a:
    print(item, end=' ')
# Output: 10 20 30 40 50

print()
print(30 in a)   # True
print(99 in a)   # False
print(len(a))    # 5

Arrays verändern

Arrays sind veränderbar — du kannst Elemente nach der Erstellung ändern, hinzufügen und entfernen.

Ein Element ändern

Weise einem Index direkt einen neuen Wert zu:

python— editable, runs on the server

Elemente hinzufügen

Verwende append(), um ein einzelnes Element am Ende hinzuzufügen, oder extend(), um mehrere Elemente aus einem beliebigen Iterable hinzuzufügen:

python— editable, runs on the server

Verwende insert(index, value), um ein Element an einer bestimmten Position einzufügen:

import array as arr

a = arr.array('i', [1, 2, 3, 4, 5])

a.insert(2, 10)   # insert 10 before index 2
print(a)          # array('i', [1, 2, 10, 3, 4, 5])

Elemente entfernen

remove(value) löscht das erste Vorkommen des angegebenen Werts und löst ValueError aus, wenn er nicht gefunden wird:

python— editable, runs on the server

pop(index) entfernt und gibt das Element bei index zurück (standardmäßig das letzte Element):

import array as arr

a = arr.array('i', [1, 2, 3, 4, 5])

last = a.pop()     # removes and returns 5
print(last)        # 5
print(a)           # array('i', [1, 2, 3, 4])

second = a.pop(1)  # removes and returns element at index 1
print(second)      # 2
print(a)           # array('i', [1, 3, 4])

Suchen und Zählen

index(value) gibt den Index des ersten Vorkommens von value zurück (löst ValueError aus, wenn nicht vorhanden):

import array as arr

a = arr.array('i', [10, 20, 30, 20, 40])

print(a.index(20))   # 1 — first occurrence
print(a.index(30))   # 2

count(value) gibt zurück, wie oft value vorkommt:

import array as arr

a = arr.array('i', [1, 2, 2, 3, 2, 4])

print(a.count(2))   # 3
print(a.count(9))   # 0

Ein Array umkehren

reverse() kehrt das array in-place um:

import array as arr

a = arr.array('i', [1, 2, 3, 4, 5])

a.reverse()
print(a)   # array('i', [5, 4, 3, 2, 1])

Konvertierung zwischen Arrays und Listen

tolist() konvertiert ein array in eine Standard-Python-Liste. Für die umgekehrte Richtung übergib eine Liste an array.array():

import array as arr

a = arr.array('i', [1, 2, 3, 4, 5])

# array → list
my_list = a.tolist()
print(my_list)          # [1, 2, 3, 4, 5]
print(type(my_list))    # <class 'list'>

# list → array
back = arr.array('i', my_list)
print(back)             # array('i', [1, 2, 3, 4, 5])

Den Elementtyp ändern

Das Attribut typecode ist schreibgeschützt. Um dieselben Werte unter einem anderen Typ zu speichern, erstelle ein neues array und verwende das ursprüngliche als Initializer:

python— editable, runs on the server

Speichereffizienz: Arrays vs. Listen

Der wichtigste praktische Grund, das array-Modul statt einer Liste zu verwenden, ist der Speicher. Eine Liste speichert Referenzen auf Python-Objekte; ein array speichert die rohen C-Werte direkt.

import array as arr
import sys

n = 1000
my_list  = list(range(n))
my_array = arr.array('i', range(n))

print('List  size:', sys.getsizeof(my_list),  'bytes')
print('Array size:', sys.getsizeof(my_array), 'bytes')
# Example output (64-bit platform):
# List  size: 8056 bytes
# Array size: 4096 bytes

Bei großen Datensätzen (Hunderttausende von ganzen Zahlen) summieren sich die Einsparungen erheblich. Wenn du noch mehr Leistungsfähigkeit benötigst — vektorisierte Mathematik, mehrdimensionale Arrays — ziehe NumPy in Betracht.

Wann Arrays vs. Listen verwenden

Verwende das array-Modul, wenn:

  • Du eine große Anzahl homogener numerischer Werte speicherst (Sensormesswerte, Pixeldaten, Netzwerkpuffer usw.).
  • Der Speicherverbrauch ein Problem ist und du keine Drittanbieterbibliothek verwenden kannst.
  • Du aus Binärdateien oder Netzwerk-Sockets liest oder in diese schreibst (die Methoden tofile() / fromfile() machen das unkompliziert).

Bleib bei Python-Listen, wenn:

  • Du gemischte Typen oder beliebige Objekte speichern musst.
  • Die Sammlung klein ist und Speicher kein Problem darstellt.
  • Du umfangreiche Listenmethoden benötigst, wie sort() mit einer Schlüsselfunktion.

Verwende NumPy, wenn:

  • Du mathematische Operationen auf ganzen Arrays benötigst (vektorisierte Arithmetik, Matrizenalgebra, Statistik).
  • Du mit mehrdimensionalen Daten arbeitest.

Methodenreferenz

MethodeBeschreibung
append(x)x am Ende des Arrays hinzufügen
extend(iterable)Alle Elemente aus iterable am Ende hinzufügen
insert(i, x)x vor Index i einfügen
remove(x)Das erste Vorkommen von x entfernen
pop([i])Element bei Index i entfernen und zurückgeben (Standard: letztes)
index(x)Den Index des ersten Vorkommens von x zurückgeben
count(x)Die Anzahl der Vorkommen von x zurückgeben
reverse()Das array in-place umkehren
tolist()Das array in eine Python-Liste konvertieren
tofile(f)Alle Elemente als Maschinenwerte in das offene Dateiobjekt f schreiben
fromfile(f, n)n Elemente aus dem Dateiobjekt f lesen und an das array anhängen

Übungen

Übung
Which of the following are valid operations on a Python array from the array module?
Which of the following are valid operations on a Python array from the array module?
Was this page helpful?