Python leverer kraftfulde datastrukturer kaldet lister, som kan lagre og manipulere samlinger af elementer. Giver også mange måder at oprette 2-dimensionelle lister/arrays på. Men man skal kende forskellene mellem disse måder, fordi de kan skabe komplikationer i kode, som kan være meget svære at spore ud. I denne artikel vil vi udforske den rigtige måde at bruge 2D-arrays/lister i Python.
Brug af 2D-arrays/lister på den rigtige måde
Brug af 2D-arrays/lister på den rigtige måde involverer forståelse af strukturen, adgang til elementer og effektiv manipulation af data i et todimensionelt gitter. Når du arbejder med strukturerede data eller gitter, kan 2D-arrays eller -lister være nyttige. Et 2D-array er i det væsentlige en liste over lister, som repræsenterer en tabellignende struktur med rækker og kolonner.
ubuntu build vigtigt
Oprettelse af en 1-D liste
I Python kræver initialisering af en samling af elementer i en lineær sekvens oprettelse af et 1D-array, hvilket er en grundlæggende proces. Selvom Python ikke har en indbygget datastruktur kaldet et ’1D array’, kan vi bruge en liste, der kan opnå samme funktionalitet. Python-lister er dynamiske og alsidige, hvilket gør dem til et fremragende valg til at repræsentere 1D-arrays. Lad os starte med at se på almindelige måder at skabe et 1d-array af størrelse N initialiseret med 0'er.
Oprettelse af 1D-liste ved hjælp af naive metoder
Manuel initialisering og udfyldning af en liste uden brug af avancerede funktioner eller konstruktioner i Python er kendt som at oprette en 1D-liste ved hjælp af naive metoder.
Python3
N>=> 5> ar>=> [>0>]>*>N> print>(ar)> |
>
>
Produktion
[0, 0, 0, 0, 0]>
Oprettelse af 1D-liste ved hjælp af listeforståelse
Her multiplicerer vi antallet af rækker med den tomme liste, og derfor oprettes hele listen med hvert element nul.
Python3
N>=> 5> arr>=> [>0> for> i>in> range>(N)]> print>(arr)> |
>
>
Produktion
[0, 0, 0, 0, 0]>
Oprettelse af en 2D-liste
Brug af 2D-arrays/lister på den rigtige måde involverer forståelse af strukturen, adgang til elementer og effektiv manipulation af data i et todimensionelt gitter. Ved at mestre brugen af 2D-arrays kan du markant forbedre din evne til at håndtere komplekse data og effektivt udføre forskellige operationer.
Oprettelse af 2D-liste ved hjælp af Naiv metode
Her multiplicerer vi antallet af kolonner, og derfor får vi 1-D-listen med størrelse svarende til antallet af kolonner og derefter gange den med antallet af rækker, hvilket resulterer i oprettelsen af en 2-D-liste.
værdien af java-strengen
Python3
rows, cols>=> (>5>,>5>)> arr>=> [[>0>]>*>cols]>*>rows> print>(arr)> |
>
>
Produktion
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]>
Bemærk: Brug af denne metode kan nogle gange forårsage uventet adfærd. I denne metode vil hver række referere til den samme kolonne. Det betyder, at selvom vi kun opdaterer ét element i arrayet, vil det opdatere den samme kolonne i vores array.
Python
rows, cols>=> (>5>,>5>)> arr>=> [[>0>]>*>cols]>*>rows> print>(arr,>'before'>)> arr[>0>][>0>]>=> 1> # update only one element> print>(arr,>'after'>)> |
>
>
Produktion
([[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]], 'before') ([[1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0]], 'after')>
Oprettelse af 1D-liste ved hjælp af Listeforståelse
Her bruger vi dybest set begrebet listeforståelse og anvender en løkke til en liste inde i en liste og skaber dermed en 2D-liste.
Python3
hvad er eksport i linux
rows, cols>=> (>5>,>5>)> arr>=> [[>0> for> i>in> range>(cols)]>for> j>in> range>(rows)]> print>(arr)> |
>
>
Produktion
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]>
Oprettelse af 1D-liste ved hjælp af Tom liste
Her tilføjer vi nuller som elementer for et antal kolonner gange og tilføjer derefter denne 1-D-liste til den tomme rækkeliste og skaber dermed 2-D-listen.
Python3
arr>=>[]> rows, cols>=>5>,>5> for> i>in> range>(rows):> >col>=> []> >for> j>in> range>(cols):> >col.append(>0>)> >arr.append(col)> print>(arr)> |
>
>
Produktion
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]>
Initialiserer 2D Array
Den medfølgende kode demonstrerer to forskellige tilgange til initialisering af et 2D-array i Python . Først arrayetarr>initialiseres ved hjælp af en 2D listeforståelse, hvor hver række oprettes som[0, 0, 0, 0, 0]>. Hele arrayet oprettes som en liste over referencer til den samme indre liste, hvilket resulterer i aliasing. Enhver ændring af et element i en række vil blive afspejlet i alle rækker. Koden viser derefter en anden tilgang ved hjælp af en indlejret listeforståelse til at skabe 2D-arrayetarr>. Denne metode undgår aliasing ved at oprette en ny liste for hver række, hvilket resulterer i et ordentligt 2D-array.
javascript onload
Python3
# Python 3 program to demonstrate working> # of method 1 and method 2.> rows, cols>=> (>5>,>5>)> # method 2 1st approach> arr>=> [[>0>]>*>cols]>*>rows> # lets change the first element of the> # first row to 1 and print the array> arr[>0>][>0>]>=> 1> for> row>in> arr:> >print>(row)> # method 2 2nd approach> arr>=> [[>0> for> i>in> range>(cols)]>for> j>in> range>(rows)]> # again in this new array lets change> # the first element of the first row> # to 1 and print the array> arr[>0>][>0>]>=> 1> for> row>in> arr:> >print>(row)> |
>
>
Produktion
[1, 0, 0, 0, 0] [1, 0, 0, 0, 0] [1, 0, 0, 0, 0] [1, 0, 0, 0, 0] [1, 0, 0, 0, 0] [1, 0, 0, 0, 0] [0, 0, 0, 0, 0] [0, 0, 0, 0, 0] [0, 0, 0, 0, 0] [0, 0, 0, 0, 0]>
Forklaring:
Vi forventer, at kun det første element i den første række ændres til 1, men det første element i hver række ændres til 1 i metode 2a. Denne ejendommelige funktion skyldes, at Python bruger overfladiske lister, som vi vil forsøge at forstå.
I metode 1a opretter Python ikke 5 heltalsobjekter, men opretter kun ét heltalsobjekt, og alle indekserne for array-arr peger på det samme int-objekt som vist.

Hvis vi tildeler det 0. indeks til et andet heltal, f.eks. 1, så oprettes et nyt heltalsobjekt med værdien 1, og så peger det 0. indeks nu på dette nye int-objekt som vist nedenfor

På samme måde, når vi opretter et 2d-array som arr = [[0]*cols]*rækker, udvider vi i det væsentlige ovenstående analogi.
- Der oprettes kun ét heltalsobjekt.
- Der oprettes en enkelt 1d-liste, og alle dens indekser peger på det samme int-objekt i punkt 1.
- Nu, arr[0], arr[1], arr[2] …. arr[n-1] peger alle på det samme listeobjekt ovenfor i punkt 2.
Ovenstående opsætning kan visualiseres på billedet nedenfor.

Lad os nu ændre det første element i første række af arr som arr[0][0] = 1
- arr[0] peger på det enkelte listeobjekt, vi oprettede ovenfor. (Husk arr[1], arr[2] …arr[n-1] peger også på det samme listeobjekt).
- Tildelingen af arr[0][0] vil skabe et nyt int-objekt med værdien 1, og arr[0][0] vil nu pege på dette nye int-objekt.(og det vil arr[1][0], arr også [2][0] … arr[n-1][0])
Dette kan tydeligt ses på billedet nedenfor.

Så når 2d-arrays oprettes på denne måde, vil ændring af værdier i en bestemt række påvirke alle rækkerne, da der i det væsentlige kun er ét heltalsobjekt og kun ét listeobjekt, der refereres af alle rækkerne i arrayet.
Som du ville forvente, er det vanskeligt at spore fejl forårsaget af sådan brug af lavvandede lister. Derfor er den bedre måde at erklære et 2d-array på
Python3
rows, cols>=> (>5>,>5>)> print>([[>0> for> i>in> range>(cols)]>for> j>in> range>(rows)])> |
>
>
Produktion
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]>
Denne metode opretter 5 separate listeobjekter i modsætning til metode 2a. En måde at kontrollere dette på er ved at bruge 'er'-operatoren, som kontrollerer, om de to operander refererer til det samme objekt.
java læse csv-fil
Python3
rows, cols>=> (>5>,>5>)> # method 2 2nd approach> arr>=> [[>0> for> i>in> range>(cols)]>for> j>in> range>(rows)]> # check if arr[0] and arr[1] refer to> # the same object> print>(arr[>0>]>is> arr[>1>])># prints False> # method 2 1st approach> arr>=> [[>0>]>*>cols]>*>rows> # check if arr[0] and arr[1] refer to the same object prints True because there is only one> #list object being created.> print>(arr[>0>]>is> arr[>1>])> |
>
>
Produktion
False True>