array — Platzsparende Arrays numerischer Werte¶
Dieses Modul definiert einen Objekttyp, der ein Array einfacher Werte platzsparend darstellen kann: Zeichen, ganze Zahlen, Gleitkommazahlen und komplexe Zahlen. Arrays sind veränderliche Sequenz-Typen und verhalten sich weitgehend wie Listen, nur dass der Typ der darin gespeicherten Objekte festgelegt ist. Dieser Typ wird beim Erzeugen des Objekts über einen Typcode angegeben. Die folgenden Typcodes sind definiert:
Typcode |
C-Typ |
Python-Typ |
Mindestgröße in Bytes |
Hinweise |
|---|---|---|---|---|
|
signed char |
int |
1 |
|
|
unsigned char |
int |
1 |
|
|
wchar_t |
Unicode-Zeichen |
2 |
(1) |
|
Py_UCS4 |
Unicode-Zeichen |
4 |
(2) |
|
signed short |
int |
2 |
|
|
unsigned short |
int |
2 |
|
|
signed int |
int |
2 |
|
|
unsigned int |
int |
2 |
|
|
signed long |
int |
4 |
|
|
unsigned long |
int |
4 |
|
|
signed long long |
int |
8 |
|
|
unsigned long long |
int |
8 |
|
|
_Float16 |
float |
2 |
(3) |
|
float |
float |
4 |
|
|
double |
float |
8 |
|
|
float complex |
complex |
8 |
(4) |
|
double complex |
complex |
16 |
(4) |
Hinweise:
Je nach Plattform können es 16 oder 32 Bit sein.
Geändert in Version 3.9:
array('u')verwendet jetztwchar_tals C-Typ anstelle des veraltetenPy_UNICODE. Diese Änderung wirkt sich nicht auf das Verhalten aus, weilPy_UNICODEseit Python 3.3 ein Alias fürwchar_tist.Veraltet seit Version 3.3, wird in Version 3.16 entfernt: Bitte wechsle zum Typcode
'w'.Added in version 3.13.
Der Typ IEEE 754 binary16 mit „halber Genauigkeit“ wurde mit der Fassung von 2008 des IEEE-754-Standards eingeführt. C-Compiler unterstützen diesen Typ nicht durchgängig. Er steht als Typ _Float16 zur Verfügung, wenn der Compiler Anhang H des C23-Standards unterstützt.
Added in version 3.15.
Die komplexen Typen (
ZfundZd) stehen immer zur Verfügung, unabhängig davon, ob der C-Compiler komplexe Typen unterstützt (Anhang G des C11-Standards). Wie im C11-Standard festgelegt, wird jeder komplexe Typ durch ein C-Array aus zwei Elementen dargestellt, die den Real- und den Imaginärteil enthalten.Added in version 3.15.
Siehe auch
Die Module ctypes und struct sowie Module von Drittanbietern wie numpy verwenden ähnliche – aber leicht abweichende – Typcodes.
Die tatsächliche Darstellung der Werte hängt von der Maschinenarchitektur ab, genau genommen von der C-Implementierung. Die tatsächliche Größe lässt sich über das Attribut array.itemsize abfragen.
Das Modul definiert das folgende Element:
- array.typecodes¶
Ein Tupel mit allen verfügbaren Typcodes.
Das Modul definiert den folgenden Typ:
- class array.array(typecode[, initializer])¶
Ein neues Array, dessen Elemente durch typecode eingeschränkt sind und das aus dem optionalen Wert initializer heraus initialisiert wird. Dieser muss ein
bytes- oderbytearray-Objekt, eine Unicode-Zeichenkette oder ein Iterable über Elemente des passenden Typs sein.Wird ein
bytes- oderbytearray-Objekt übergeben, geht der Initialisierer an die Methodefrombytes()des neuen Arrays. Bei einer Unicode-Zeichenkette geht er an die Methodefromunicode(). Andernfalls wird der Iterator des Initialisierers an die Methodeextend()übergeben, um die ersten Elemente in das Array einzufügen.Array-Objekte unterstützen die gewöhnlichen Operationen einer veränderlichen Sequenz: Indizierung, Slicing, Verkettung und Multiplikation. Bei einer Zuweisung an ein Slice muss der zugewiesene Wert ein Array-Objekt mit demselben Typcode sein, in allen anderen Fällen wird
TypeErrorausgelöst. Array-Objekte setzen außerdem die Puffer-Schnittstelle um und lassen sich überall dort verwenden, wo byte-ähnliche Objekte unterstützt werden.Arrays sind generisch über den Typ ihres Inhalts.
Löst ein Auditing-Ereignis
array.__new__mit den Argumententypecode,initializeraus.- typecode¶
Das Typcode-Zeichen, mit dem das Array erzeugt wurde.
- itemsize¶
Die Länge eines Array-Elements in Bytes in der internen Darstellung.
- append(value, /)¶
Hängt ein neues Element mit dem angegebenen Wert an das Ende des Arrays an.
- buffer_info()¶
Gibt ein Tupel
(address, length)zurück, das die aktuelle Speicheradresse und die Länge in Elementen des Puffers nennt, in dem der Inhalt des Arrays liegt. Die Größe des Speicherpuffers in Bytes lässt sich alsarray.buffer_info()[1] * array.itemsizeberechnen. Das ist gelegentlich nützlich, wenn du mit E/A-Schnittstellen auf niedriger Ebene arbeitest, die Speicheradressen benötigen und damit von Natur aus unsicher sind, etwa mit bestimmtenioctl()-Operationen. Die zurückgegebenen Zahlen sind gültig, solange das Array besteht und keine Operation darauf angewandt wird, die seine Länge ändert.Bemerkung
Verwendest du Array-Objekte aus C- oder C++-Code heraus, ist die Puffer-Schnittstelle der Array-Objekte die bessere Wahl – nur von dort lassen sich diese Angaben überhaupt sinnvoll nutzen. Diese Methode wird nur aus Gründen der Rückwärtskompatibilität beibehalten und sollte in neuem Code vermieden werden. Die Puffer-Schnittstelle ist unter Buffer-Protokoll beschrieben.
- byteswap()¶
Vertauscht die Bytes („byteswap“) aller Elemente des Arrays. Das wird nur für Werte mit einer Größe von 1, 2, 4, 8 oder 16 Bytes unterstützt, bei anderen Werttypen wird
RuntimeErrorausgelöst. Nützlich ist das beim Einlesen von Daten aus einer Datei, die auf einer Maschine mit anderer Byte-Reihenfolge geschrieben wurde. Beachte, dass bei komplexen Typen die Reihenfolge der Bestandteile erhalten bleibt: zuerst der Realteil, dann der Imaginärteil.
- count(value, /)¶
Gibt zurück, wie oft value im Array vorkommt.
- extend(iterable, /)¶
Hängt die Elemente aus iterable an das Ende des Arrays an. Ist iterable ein anderes Array, muss es genau denselben Typcode haben, sonst wird
TypeErrorausgelöst. Ist iterable kein Array, muss es iterierbar sein und seine Elemente müssen vom richtigen Typ sein, um an das Array angehängt werden zu können.
- frombytes(buffer, /)¶
Hängt die Elemente aus dem byte-ähnlichen Objekt an und deutet dessen Inhalt als Array von Maschinenwerten, so als wäre er mit der Methode
fromfile()aus einer Datei gelesen worden.Added in version 3.2:
fromstring()wurde zur Klarheit infrombytes()umbenannt.
- fromfile(f, n, /)¶
Liest n Elemente als Maschinenwerte aus dem Dateiobjekt f und hängt sie an das Ende des Arrays an. Stehen weniger als n Elemente zur Verfügung, wird
EOFErrorausgelöst, die verfügbaren Elemente werden aber dennoch in das Array eingefügt.
- fromlist(list, /)¶
Hängt die Elemente aus der Liste an. Das entspricht
for x in list: a.append(x), nur dass das Array bei einem Typfehler unverändert bleibt.
- fromunicode(ustr, /)¶
Erweitert dieses Array um die Daten aus der angegebenen Unicode-Zeichenkette. Das Array muss den Typcode
'u'oder'w'haben, sonst wirdValueErrorausgelöst. Verwendearray.frombytes(unicodestring.encode(enc)), um Unicode-Daten an ein Array eines anderen Typs anzuhängen.
- index(value[, start[, stop]])¶
Gibt das kleinste i zurück, sodass i der Index des ersten Vorkommens von value im Array ist. Mit den optionalen Argumenten start und stop lässt sich die Suche nach value auf einen Abschnitt des Arrays beschränken. Löst
ValueErroraus, wenn value nicht gefunden wird.Geändert in Version 3.10: Die optionalen Parameter start und stop wurden hinzugefügt.
- insert(index, value, /)¶
Fügt ein neues Element value vor der Position index in das Array ein. Negative Werte werden relativ zum Ende des Arrays gezählt.
- pop(index=-1, /)¶
Entfernt das Element mit dem Index i aus dem Array und gibt es zurück. Das optionale Argument ist mit
-1vorbelegt, sodass voreingestellt das letzte Element entfernt und zurückgegeben wird.
- remove(value, /)¶
Entfernt das erste Vorkommen von value aus dem Array.
- clear()¶
Entfernt alle Elemente aus dem Array.
Added in version 3.13.
- reverse()¶
Kehrt die Reihenfolge der Elemente im Array um.
- tobytes()¶
Wandelt das Array in ein Array von Maschinenwerten um und gibt die Bytes-Darstellung zurück, also dieselbe Folge von Bytes, die die Methode
tofile()in eine Datei schreiben würde.Added in version 3.2:
tostring()wurde zur Klarheit intobytes()umbenannt.
- tofile(f, /)¶
Schreibt alle Elemente als Maschinenwerte in das Dateiobjekt f.
- tolist()¶
Wandelt das Array in eine gewöhnliche Liste mit denselben Elementen um.
- tounicode()¶
Wandelt das Array in eine Unicode-Zeichenkette um. Das Array muss den Typ
'u'oder'w'haben, sonst wirdValueErrorausgelöst. Verwendearray.tobytes().decode(enc), um aus einem Array eines anderen Typs eine Unicode-Zeichenkette zu erhalten.
Die Zeichenkettendarstellung von Array-Objekten hat die Form array(typecode, initializer). initializer fehlt, wenn das Array leer ist. Andernfalls ist es eine Unicode-Zeichenkette, falls typecode 'u' oder 'w' ist, sonst eine Liste von Zahlen. Die Zeichenkettendarstellung lässt sich zugesichert mit eval() wieder in ein Array desselben Typs und Werts zurückverwandeln, solange die Klasse array mit from array import array importiert wurde. Enthält sie entsprechende Gleitkommawerte, müssen außerdem die Variablen inf und nan definiert sein. Beispiele:
array('l')
array('w', 'hello \u2641')
array('l', [1, 2, 3, 4, 5])
array('d', [1.0, 2.0, 3.14, -inf, nan])