array — Effektiva arrayer av numeriska värden


Denna modul definierar en objekttyp som på ett kompakt sätt kan representera en array av grundläggande värden: tecken, heltal, flyttal. Arrayer är sekvenstyper och beter sig ungefär som listor, med undantag för att typen av objekt som lagras i dem är begränsad. Typen anges när objektet skapas med hjälp av en type code, som är ett enda tecken. Följande typkoder är definierade:

Typkod

C Type

Python Type

Minsta storlek i byte

Anteckningar

'b'

signed char

int

1

'B'

unsigned char

int

1

'u'

wchar_t

Unicode-tecken

2

(1)

'w'

Py_UCS4

Unicode-tecken

4

(2)

'h'

signed short

int

2

'H'

unsigned short

int

2

'i'

signed int

int

2

'I'

unsigned int

int

2

'l'

signed long

int

4

'L'

unsigned long

int

4

'q'

signed long long

int

8

'Q'

unsigned long long

int

8

'f'

float

float

4

'd'

double

float

8

Anteckningar:

  1. Den kan vara 16 bitar eller 32 bitar beroende på plattform.

    Ändrad i version 3.9: array('u') använder nu wchar_t som C-typ istället för föråldrade Py_UNICODE. Denna ändring påverkar inte dess beteende eftersom Py_UNICODE är alias för wchar_t sedan Python 3.3.

    Deprecated since version 3.3, will be removed in version 3.16: Migrera till 'w' typkod.

  2. Tillagd i version 3.13.

Den faktiska representationen av värden bestäms av maskinarkitekturen (strängt taget av C-implementeringen). Den faktiska storleken kan nås via attributet array.itemsize.

Modulen definierar följande objekt:

array.typecodes

En sträng med alla tillgängliga typkoder.

Modulen definierar följande typ:

class array.array(typecode[, initializer])

En ny array vars element begränsas av typecode och initieras från det valfria värdet initializer, som måste vara ett bytes- eller bytearray-objekt, en Unicode-sträng eller en iterabel över element av lämplig typ.

Om den ges ett bytes eller bytearray-objekt skickas initialiseraren till den nya arrayens frombytes()-metod; om den ges en Unicode-sträng skickas initialiseraren till fromunicode()-metoden; annars skickas initialiserarens iterator till extend()-metoden för att lägga till initiala objekt i arrayen.

Array-objekt stöder de vanliga sekvensoperationerna indexering, skivning, konkatenering och multiplicering. Vid användning av slice assignment måste det tilldelade värdet vara ett array-objekt med samma typkod; i alla andra fall uppstår TypeError. Array-objekt implementerar också buffertgränssnittet och kan användas överallt där bytesliknande objekt stöds.

Utlöser en auditing event array.__new__ med argumenten typecode, initializer.

typecode

Typkodstecknet som användes för att skapa arrayen.

itemsize

Längden i byte för ett arrayobjekt i den interna representationen.

append(x)

Lägg till ett nytt objekt med värdet x i slutet av arrayen.

buffer_info()

Returnerar en tupel (adress, längd) som ger den aktuella minnesadressen och längden i element för den buffert som används för att hålla arrayens innehåll. Storleken på minnesbufferten i byte kan beräknas som array.buffer_info()[1] * array.itemsize. Detta är ibland användbart när man arbetar med lågnivå (och i sig osäkra) I/O-gränssnitt som kräver minnesadresser, t.ex. vissa ioctl()-operationer. De returnerade siffrorna är giltiga så länge som arrayen existerar och inga längdförändrande operationer tillämpas på den.

Anteckning

När du använder array-objekt från kod skriven i C eller C++ (det enda sättet att effektivt använda denna information) är det mer meningsfullt att använda buffertgränssnittet som stöds av array-objekt. Denna metod bibehålls för bakåtkompatibilitet och bör undvikas i ny kod. Buffertgränssnittet finns dokumenterat i Buffertprotokoll.

byteswap()

”Byteswap” alla objekt i arrayen. Detta stöds endast för värden som är 1, 2, 4 eller 8 byte stora; för andra typer av värden uppstår RuntimeError. Det är användbart när man läser data från en fil som skrivits på en maskin med en annan byteordning.

count(x)

Returnerar antalet förekomster av x i arrayen.

extend(iterable)

Lägger till objekt från iterable till slutet av arrayen. Om iterable är en annan array, måste den ha exakt samma typkod; om inte, kommer TypeError att tas upp. Om iterable inte är en array måste den vara iterabel och dess element måste vara av rätt typ för att kunna läggas till i arrayen.

frombytes(buffer)

Lägger till objekt från bytes-like object och tolkar dess innehåll som en array av maskinvärden (som om det hade lästs från en fil med metoden fromfile()).

Tillagd i version 3.2: fromstring() byter namn till frombytes() för tydlighetens skull.

fromfile(f, n)

Läser n objekt (som maskinvärden) från file object f och lägger till dem i slutet av arrayen. Om färre än n objekt är tillgängliga, genereras EOFError, men de objekt som var tillgängliga infogas fortfarande i arrayen.

fromlist(list)

Lägger till objekt från listan. Detta är likvärdigt med for x in list: a.append(x) förutom att om det finns ett typfel är arrayen oförändrad.

fromunicode(s)

Utökar denna array med data från den angivna Unicode-strängen. Arrayen måste ha typkoden 'u' eller 'w'; annars uppstår ett ValueError. Använd array.frombytes(unicodestring.encode(enc)) för att lägga till Unicode-data till en array av någon annan typ.

index(x[, start[, stop]])

Returnerar den minsta i så att i är index för den första förekomsten av x i arrayen. De valfria argumenten start och stop kan anges för att söka efter x inom en underavdelning av arrayen. Utlöser ValueError om x inte hittas.

Ändrad i version 3.10: Valfria parametrar start och stop har lagts till.

insert(i, x)

Infoga ett nytt objekt med värdet x i arrayen före position i. Negativa värden behandlas som relativa till slutet av arrayen.

pop([i])

Tar bort objektet med index i från arrayen och returnerar det. Det valfria argumentet är som standard -1, så att det sista objektet som standard tas bort och returneras.

remove(x)

Ta bort den första förekomsten av x från arrayen.

clear()

Ta bort alla element från arrayen.

Tillagd i version 3.13.

reverse()

Omvänd ordning på objekten i arrayen.

tobytes()

Omvandla arrayen till en array med maskinvärden och returnera bytesrepresentationen (samma sekvens av bytes som skulle skrivas till en fil med metoden tofile())

Tillagd i version 3.2: tostring() byter namn till tobytes() för tydlighetens skull.

tofile(f)

Skriv alla objekt (som maskinvärden) till file object f.

tolist()

Omvandla arrayen till en vanlig lista med samma objekt.

tounicode()

Konverterar arrayen till en Unicode-sträng. Arrayen måste vara av typen 'u' eller 'w', annars uppstår ett ValueError. Använd array.tobytes().decode(enc) för att få en Unicode-sträng från en array av någon annan typ.

Strängrepresentationen av array-objekt har formen array(typecode, initializer). initialiseraren utelämnas om arrayen är tom, annars är det en Unicode-sträng om typkoden är 'u' eller 'w', annars är det en lista med siffror. Strängrepresentationen kan garanterat konverteras tillbaka till en array med samma typ och värde med hjälp av eval(), så länge som klassen array har importerats med from array import array. Variablerna inf och nan måste också definieras om de innehåller motsvarande värden i flyttal. Exempel:

array('l')
array('w', 'hello \u2641')
array('l', [1, 2, 3, 4, 5])
array('d', [1.0, 2.0, 3.14, -inf, nan])

Se även

Modul struct

Packning och uppackning av heterogena binära data.

NumPy

NumPy-paketet definierar en annan array-typ.