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 |
---|---|---|---|---|
|
signed char |
int |
1 |
|
|
unsigned char |
int |
1 |
|
|
wchar_t |
Unicode-tecken |
2 |
(1) |
|
Py_UCS4 |
Unicode-tecken |
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 |
|
|
float |
float |
4 |
|
|
double |
float |
8 |
Anteckningar:
Den kan vara 16 bitar eller 32 bitar beroende på plattform.
Ändrad i version 3.9:
array('u')
använder nuwchar_t
som C-typ istället för föråldradePy_UNICODE
. Denna ändring påverkar inte dess beteende eftersomPy_UNICODE
är alias förwchar_t
sedan Python 3.3.Deprecated since version 3.3, will be removed in version 3.16: Migrera till
'w'
typkod.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
- ellerbytearray
-objekt, en Unicode-sträng eller en iterabel över element av lämplig typ.Om den ges ett
bytes
ellerbytearray
-objekt skickas initialiseraren till den nya arrayensfrombytes()
-metod; om den ges en Unicode-sträng skickas initialiseraren tillfromunicode()
-metoden; annars skickas initialiserarens iterator tillextend()
-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 argumententypecode
,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 somarray.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. vissaioctl()
-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 tillfrombytes()
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 ettValueError
. Användarray.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 tilltobytes()
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 ettValueError
. Användarray.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])