Python-lista eller NumPy-array? Så väljer du rätt

23 oktober 2026

NumPy array över Python-lista? En fråga för programmerare som utforskar datastrukturer.

Du räknar ut nya priser från en lista, men uttrycket priser * 1.25 ger inte den nya listan du tänkt dig. För numeriska beräkningar kan en array vara rätt val, men Python har flera olika slags samlingar som kallas så i olika sammanhang.

Exempel på en array i Python som visar maxvärdet (6), minvärdet (1) och summan (21) av elementen.

Välj samling efter hur du ska använda värdena

  • List passar när samlingen ska kunna ändras och innehålla olika slags värden.
  • array.array lagrar värden av en angiven grundtyp i en kompakt sekvens.
  • NumPy ndarray passar för numeriska beräkningar, flera dimensioner och operationer på hela samlingen.
  • För prisexemplet kan NumPy multiplicera varje element direkt, medan en lista kräver en loop eller en list comprehension.

Ordet array kan syfta på tre olika saker

En samling med produktpriser kan vara en list, en array.array eller en NumPy-array. Namnen låter närbesläktade, men typerna har olika egenskaper och är inte utbytbara i alla uttryck.

I vanliga Python-program är list ofta det naturliga förstavalet. Listor kan ändras och innehålla värden av olika typer, även om elementen ofta har något gemensamt. Modulen array i Pythons standardbibliotek är i stället avsedd för sekvenser där elementen begränsas till en angiven typ, medan NumPy erbjuder flerdimensionella arrayer för numeriskt arbete. Pythons dokumentation om array beskriver standardbibliotekets variant.

Namnet räcker alltså inte för att avgöra hur en samling fungerar. Titta på typen och på vilka operationer koden behöver utföra.

En lista och en array reagerar olika på multiplikation

Här syns skillnaden direkt. Multiplicera en lista med ett heltal, så upprepas innehållet; multiplikationen gör ingen uträkning med varje värde.

priser = [100, 200, 300]

print(priser * 2)
# [100, 200, 300, 100, 200, 300]
För att höja priserna med 25 procent kan du använda en list comprehension, alltså ett kort uttryck som skapar en ny lista genom att behandla varje element:
nya_priser = [pris * 1.25 for pris in priser]
# [125.0, 250.0, 375.0]

Med NumPy går operationen att skriva direkt på hela arrayen:

import numpy as np

priser = np.array([100, 200, 300])
nya_priser = priser * 1.25
# array([125., 250., 375.])

NumPy utför sådana elementvisa beräkningar utan att du själv skriver en Python-loop. NumPys dokumentation om att skapa arrayer visar också hur listor och nästlade listor kan omvandlas till arrayer. Jag tycker att NumPy är det tydligaste valet när själva poängen är att räkna på många numeriska värden samtidigt.

Välj list för blandade data och NumPy för beräkningar

En lista fungerar bra för en växande samling, exempelvis artiklar i en kundvagn eller texter som ska visas på en webbsida. En standardbiblioteksarray passar bättre när värdena är numeriska och du vill begränsa dem till en grundtyp utan att ta in ett externt paket.

NumPy blir användbart när du ska räkna elementvis, arbeta med matriser eller läsa data till ett numeriskt arbetsflöde. En array med formen (2, 3) har två rader och tre kolumner; med NumPy kan du exempelvis addera en rad värden till varje rad i matrisen när dimensionerna passar ihop. Funktionen kallas broadcasting, och reglerna för kompatibla former avgör om operationen fungerar eller ger ett fel. NumPys guide till broadcasting visar bland annat hur inkompatibla dimensioner stoppar en beräkning.

En praktisk tumregel är enkel: välj list för allmänna samlingar, array.array för typbegränsade sekvenser av grundvärden och NumPy när du behöver numeriska operationer på hela datauppsättningar. För små samlingar som mest lagras och hämtas tillför NumPy ofta mer än du behöver.

Kontrollera typ och form när resultatet blir fel

Om en beräkning oväntat upprepar värden eller ger ett fel handlar problemet ofta om att objektet inte är den typ du tror, eller att NumPy-arrayernas former inte passar ihop. Börja med att skriva ut typen och, för NumPy, formen.

Situation Trolig orsak Gör så här
lista * 2 upprepar elementen Objektet är en Python-lista, där heltalsmultiplikation upprepar sekvensen. Använd en list comprehension eller omvandla till NumPy före beräkningen.
np.array(...) ger ett fel vid en operation med två arrayer Arrayernas dimensioner passar inte ihop enligt broadcasting-reglerna. Kontrollera a.shape och b.shape; justera formen eller operationen.
Ett värde ryms inte i den valda numeriska typen En begränsad datatyp, exempelvis int8, kan inte representera värdet. Välj en typ med större intervall och kontrollera resultatets dtype.

Den sista situationen är lätt att missa: en NumPy-array kan vara rätt verktyg och ändå ge problem om datatypen är för snäv. I dokumentationens exempel kan int8 lagra heltal från −128 till 127, så värdet 128 ryms inte. Det är alltså skillnad på arrayens form och dess dtype, som anger vilken typ varje element har.

Börja med den enklaste samlingen som passar

Det kan kännas lockande att kalla alla samlingar av värden för arrayer, men i kod spelar den exakta typen roll. För en vanlig lista med innehåll som ska sparas, sorteras eller visas räcker en Python-lista långt.

När du behöver räkna på många tal eller arbeta med data i flera dimensioner är NumPy oftast ett bättre val. Och om du möter array utan sammanhang, kontrollera först om det betyder Pythons standardbiblioteksmodul eller NumPys ndarray; den skillnaden avgör vilka operationer som fungerar.

Vanliga frågor

Python-listor använder heltalsmultiplikation för att upprepa sekvensen. För att räkna med varje pris kan du använda en list comprehension, till exempel [pris * 2 for pris in priser], eller omvandla listan till en NumPy-array.
Skapa en ny lista med en list comprehension: [pris * 1.25 for pris in priser]. För priserna 100, 200 och 300 blir resultatet 125.0, 250.0 och 375.0. Med NumPy kan du i stället multiplicera hela arrayen direkt med 1.25.
Använd en Python-lista för allmänna samlingar som kan ändras och innehålla olika slags värden. array.array passar typbegränsade sekvenser av grundvärden, medan NumPy ndarray är användbar för numeriska beräkningar, matriser och operationer på hela samlingen.
Kontrollera arrayernas former med a.shape och b.shape, eftersom dimensionerna måste passa ihop enligt broadcasting-reglerna. Kontrollera också dtype: en snäv typ som int8 kan lagra heltal från −128 till 127, men inte 128.
Betygsätt artikeln

Genomsnitt: 0.0 / 5 · 0 betyg

Taggar

listor numpy datatyper array.array broadcasting
Kommentarer (0)
Lägg till en kommentar