Python | Uso di array 2D/elenca nel modo giusto

| | | | | |

Metodo 1a


# Primo modo per creare un array 1D

N = 5

arr = [ 0 ] * N

print (arr)

Output:

[0, 0, 0, 0, 0] 

Metodo 1b

# Secondo modo per creare l`array 1 D

N = 5

arr = [ 0 per i in intervallo (N)]

print (arr)

Exit:

[0, 0, 0, 0, 0 ] 

Estendendo quanto sopra, possiamo definire array bidimensionali nei seguenti modi.
Metodo 2a


# Usando il primo metodo sopra per creare
# array 2D

righe, colonne = ( 5 , 5 )

arr = [[ 0 ] * cols] * righe

print (arr)

Esci:

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

Metodo 2b


# Utilizzando il secondo metodo sopra per creare
# array 2D

righe, cols = ( 5 , 5 )

arr = [[ 0 for i in range (cols)] for j in range (righe)]

print (arr)

Output:

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

Entrambi i metodi sembrano dare lo stesso risultato di adesso. Sostituiamo uno degli elementi nell`array del metodo 2a e del metodo 2b.


# Programma Python 3 per dimostrare come funziona
# metodo 1 e metodo 2.

righe , cols = ( 5 , 5 )


# metodo 2a

arr = [[ 0 ] * cols] * righe


# cambia il primo element
# prima riga su 1 e stampa l`array

arr [ 0 ] [ 0 ] = 1

for riga in arr:

print (riga)

# restituisce quanto segue
# [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]


# metodo 2b

arr = [[ 0 for i in intervallo (cols)] for j in range (righe)]


# torna a questo nuovo array ti permette di cambiare
# primo elemento della prima riga
# su 1 e stampa l`array

arr [ 0 ] [ 0 ] < classe codice = "parola chiave"> = 1

for row in arr:

print (riga)


# restituisce quanto segue come previsto
# [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]

Esci:

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

Ci aspettiamo solo il primo elemento di la prima riga cambierà in 1, ma il primo elemento di ogni riga cambierà in 1 nel metodo 2a. Questo tipo di funzionamento è dovuto al fatto che Python usa liste poco profonde, che cercheremo di capire.

Nel metodo 1a, Python non crea 5 oggetti interi, ma crea solo un oggetto intero, e tutti gli indici dell`array arr puntano allo stesso oggetto an int mostrato.


Se assegniamo l`indice 0 a un altro numero intero, diciamo 1, viene creato un nuovo oggetto intero con il valore 1, quindi l`indice 0 ora punta a questo nuovo oggetto int come mostrato di seguito

Allo stesso modo, quando creiamo un array bidimensionale come" arr = [[0] * cols] * row " , in effetti, stiamo espandendo l`analogia di cui sopra.
1. Viene creato un solo oggetto intero.
2. Viene creata una lista 1d e tutti i suoi indici puntano allo stesso oggetto int al punto 1.
3. Ora arr [0], arr [1], arr [2]…. arr [n-1] puntano tutti allo stesso oggetto elenco sopra nel passaggio 2.

L`impostazione sopra può essere visualizzata nell`immagine sotto.

Ora cambiamo il primo elemento nella prima riga" arr "as
arr [0] [0] = 1

=" arr [0] punta allo stesso oggetto elenco che abbiamo creato sopra (ricorda che anche arr [1], arr [2]… arr [n-1] puntano allo stesso oggetto elenco)
= & gt ; L`assegnazione di arr [0] [0] creerà un nuovo oggetto int con un valore di 1 e arr [0] [0] punterà ora a questo nuovo oggetto int. (E così sarà arr [1] [0], arr [2] [0]‚Ķ arr [n-1] [0])

Questo può essere visto chiaramente nell`immagine qui sotto .


Quindi, quando gli array 2d vengono creati in questo modo, cambia i valori ‚Äã‚Äãin una determinata riga influenzeranno tutte le stringhe, poiché esiste essenzialmente un solo oggetto intero e un solo oggetto elenco a cui fanno riferimento tutte le righe dell`array.

Come ci si aspetterebbe, rintracciare errori causati da questo uso di elenchi superficiali. complicato. Quindi il modo migliore per dichiarare un array 2d è


righe, cols = ( 5 , 5 )

arr = [[ 0 for i in intervallo (cols)] for j in intervallo (righe )]

Esci:

 

Questo metodo crea 5 oggetti elenco separati rispetto al metodo 2a. Un modo per verificare questo — utilizzare l`operatore "is", che controlla se due operandi fanno riferimento allo stesso oggetto.


righe, colonne = ( 5 , 5 )

# metodo 2b

arr < classe codice = "parola chiave"> = [[ 0 per i in intervallo ( cols)] for j in range (righe)]


# controlla se arr [0] e arr [1] si riferiscono a
# stesso oggetto

print (arr [ 0 ] è arr [ 1 ] ) # stampa False


# metodo 2a

arr = [[ 0 ] * cols] * righe


# controlla se arr [0] e arr [1] si riferiscono a
# that sam e oggetto
# stampa True perché c`è un solo
# elenco dell`oggetto da creare.

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

Esci:

Falso True 

Python | Uso di array 2D/elenca nel modo giusto Arrays: Questions

Python | Uso di array 2D/elenca nel modo giusto exp: Questions

Shop

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

$

Best laptop for Zoom

$499

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