Python | 2D-arrays/-lijsten op de juiste manier gebruiken

| | | | | |

Methode 1a


# Eerste manier om 1D-array te maken

N = 5

arr = [ 0 ] * N

print (arr)

Uitvoer:

[0, 0, 0, 0, 0] 

Methode 1b

# Tweede manier om array 1 D te maken

N = 5

arr = [ 0 voor i in bereik (N)]

print (arr)

Exit:

[0, 0, 0, 0, 0 ] 

Als we het bovenstaande uitbreiden, kunnen we 2-dimensionale arrays definiëren op de volgende manieren.
Methode 2a


# Gebruik de bovenstaande eerste methode om
# 2D array

rijen, cols = ( 5 , 5 )

arr = [[ 0 ] * cols] * rijen

print (arr)

Afsluiten:

[[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]] 

Methode 2b


# Gebruik de bovenstaande tweede methode om
# 2D array

rijen te maken, cols = ( 5 , 5 )

arr = [[ 0 voor i in bereik (cols)] voor j in bereik (rijen)]

print (arr)

Uitvoer:

[[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]] 

Beide methoden lijken hetzelfde resultaat te geven als nu. Laten we een van de elementen in de array van methode 2a en methode 2b vervangen.


# Python 3-programma om te demonstreren hoe het werkt
# methode 1 en methode 2.

rijen , cols = ( 5 , 5 )


# methode 2a

arr = [[ 0 ] * cols] * rijen


# verander de eerste element
# eerste regel naar 1 en druk de array af

arr [ 0 ] [ 0 ] = 1

voor rij in arr:

print (rij)

# voert het volgende uit
# [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]


# methode 2b

arr = [[ 0 voor i in bereik (cols)] voor j in bereik (rijen)]


# terug naar deze nieuwe array kunt u wijzigen
# eerste element van de eerste rij
# naar 1 en druk de array af

arr [ 0 ] [ 0 ] = 1

voor rij in arr:

print (rij)


# voert het volgende uit zoals verwacht
# [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]

Afsluiten:

[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] 

We verwachten alleen het eerste element van de eerste regel verandert in 1, maar het eerste element van elke regel verandert in 1 in methode 2a. Dit soort functioneren is te wijten aan het feit dat Python ondiepe lijsten gebruikt, die we zullen proberen te begrijpen.

In methode 1a maakt Python geen 5 integer-objecten, maar creëert het slechts één integer-object, en alle indexen van de arr-array verwijzen naar hetzelfde object int als weergegeven.


Als we de 0-index toewijzen aan een ander geheel getal, zeg 1, dan wordt een nieuw geheel getal-object gemaakt met de waarde 1, en dan wijst de 0-index nu naar dit nieuwe int-object, zoals hieronder weergegeven

Evenzo, wanneer we een tweedimensionale array maken zoals" arr = [[0] * cols] * row " , we zijn in feite, we breiden de bovenstaande analogie uit.
1. Er wordt slechts één geheel getal gemaakt.
2. Er wordt één lijst 1d gemaakt en al zijn indices wijzen naar hetzelfde int-object bij punt 1.
3. Nu arr [0], arr [1], arr [2]…. arr [n-1] verwijzen allemaal naar hetzelfde lijstobject hierboven in stap 2.

De bovenstaande instelling kan worden gevisualiseerd in de onderstaande afbeelding.

Laten we nu het eerste element in de eerste regel wijzigen" arr "as
arr [0] [0] = 1

=" arr [0] verwijst naar hetzelfde lijstobject dat we hierboven hebben gemaakt (onthoud dat arr [1], arr [2]… arr [n-1] ook naar hetzelfde lijstobject verwijzen)
= & gt ; Door arr [0] [0] toe te wijzen, wordt een nieuw int-object gemaakt met de waarde 1, en arr [0] [0] zal nu naar dit nieuwe int-object verwijzen. (En zo wordt het arr [1] [0], arr [2] [0]… arr [n-1] [0])

Dit is duidelijk te zien in de onderstaande afbeelding .


Dus wanneer 2D-arrays op deze manier worden gemaakt, verandert de waarden ‚Äã‚Äãin een bepaalde regel hebben invloed op alle tekenreeksen, aangezien er in wezen slechts één geheel getal is en slechts één lijstobject waarnaar wordt verwezen door alle rijen in de array.

Zoals je zou verwachten, spoor je het op fouten veroorzaakt door dit gebruik van ondiepe lijsten. ingewikkeld. Daarom is de beste manier om een 2D-array te declareren


rows, cols = ( 5 , 5 )

arr = [[ 0 voor i in bereik (cols)] voor j in bereik (rijen )]

Afsluiten:

 

Deze methode maakt 5 afzonderlijke lijstobjecten in tegenstelling tot methode 2a. Een manier om dit te controleren — gebruik de operator "is", die controleert of twee operanden naar hetzelfde object verwijzen.


rijen, cols = ( 5 , 5 )

# methode 2b

arr = [[ 0 voor i in bereik ( cols)] voor j in bereik (rijen)]


# controleer of arr [0] en arr [1] verwijzen naar
# hetzelfde object

print (arr [ 0 ] is arr [ 1 ] ) # prints False


# methode 2a

arr = [[ 0 ] * cols] * rijen


# controleer of arr [0] en arr [1] verwijzen naar
# that sam e object
# prints True omdat er maar één
# lijst van het te maken object is.

print (arr [ 0 ] is arr [ 1 ])

Afsluiten:

False True 

Shop

Learn programming in R: courses

$

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers


Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method