Skip to content

Inizializzare una lista con dimensioni e valori dati in Python

Python

Questo articolo descrive come inizializzare un elenco con qualsiasi dimensione (numero di elementi) e valori in Python.

  • Crea una lista vuota
  • Inizializza un elenco con qualsiasi dimensione e valore
  • Nota sull’inizializzazione di un elenco 2D (elenco di elenchi)
  • Per tupla e array

Vedere l’articolo seguente sull’inizializzazione dell’array NumPy ndarray.

Crea una lista vuota

Viene creata una lista vuota come segue. Puoi ottenere il numero di elementi di un elenco con la funzione incorporata len().

l_empty = []
print(l_empty)
# []

print(len(l_empty))
# 0

Puoi aggiungere un elemento con append() o rimuoverlo con remove().

l_empty.append(100)
l_empty.append(200)
print(l_empty)
# [100, 200]

l_empty.remove(100)
print(l_empty)
# [200]

Vedere i seguenti articoli per i dettagli sull’aggiunta e la rimozione di elementi dagli elenchi,

Inizializza un elenco con qualsiasi dimensione e valore

Come accennato in precedenza, in Python puoi facilmente aggiungere e rimuovere elementi da un elenco, quindi nella maggior parte dei casi non è necessario inizializzare l’elenco in anticipo.

Se si desidera inizializzare un elenco di un numero qualsiasi di elementi in cui tutti gli elementi sono riempiti con valore, è possibile utilizzare l’operatore * come segue.

l = [0] * 10
print(l)
# [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

print(len(l))
# 10

Viene generato un elenco che ripete gli elementi dell’elenco originale.

print([0, 1, 2] * 3)
# [0, 1, 2, 0, 1, 2, 0, 1, 2]

Puoi generare un elenco di numeri sequenziali con range().

Nota sull’inizializzazione di un elenco 2D (elenco di elenchi)

Prestare attenzione durante l’inizializzazione di un elenco di elenchi.

Il codice seguente non va bene.

l_2d_ng = [[0] * 4] * 3
print(l_2d_ng)
# [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

Se aggiorni un elenco, tutti gli elenchi verranno modificati.

l_2d_ng[0][0] = 5
print(l_2d_ng)
# [[5, 0, 0, 0], [5, 0, 0, 0], [5, 0, 0, 0]]

l_2d_ng[0].append(100)
print(l_2d_ng)
# [[5, 0, 0, 0, 100], [5, 0, 0, 0, 100], [5, 0, 0, 0, 100]]

Questo perché gli elenchi interni sono tutti lo stesso oggetto.

print(id(l_2d_ng[0]) == id(l_2d_ng[1]) == id(l_2d_ng[2]))
# True

Puoi scrivere come segue usando la comprensione degli elenchi.

l_2d_ok = [[0] * 4 for i in range(3)]
print(l_2d_ok)
# [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

Ogni elenco interno viene trattato come un oggetto diverso.

l_2d_ok[0][0] = 100
print(l_2d_ok)
# [[100, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

print(id(l_2d_ok[0]) == id(l_2d_ok[1]) == id(l_2d_ok[2]))
# False

nonostante range() sia utilizzato nell’esempio sopra, qualsiasi iterabile della dimensione desiderata è accettabile.

l_2d_ok_2 = [[0] * 4 for i in [1] * 3]
print(l_2d_ok_2)
# [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

l_2d_ok_2[0][0] = 100
print(l_2d_ok_2)
# [[100, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

print(id(l_2d_ok_2[0]) == id(l_2d_ok_2[1]) == id(l_2d_ok_2[2]))
# False

Se vuoi generare un elenco multidimensionale, puoi annidare le comprensioni degli elenchi.

l_3d = [[[0] * 2 for i in range(3)] for j in range(4)]
print(l_3d)
# [[[0, 0], [0, 0], [0, 0]], [[0, 0], [0, 0], [0, 0]], [[0, 0], [0, 0], [0, 0]], [[0, 0], [0, 0], [0, 0]]]

l_3d[0][0][0] = 100
print(l_3d)
# [[[100, 0], [0, 0], [0, 0]], [[0, 0], [0, 0], [0, 0]], [[0, 0], [0, 0], [0, 0]], [[0, 0], [0, 0], [0, 0]]]

Per tupla e array

Puoi inizializzare tuple e liste.

Si noti che una tupla con un elemento richiede ,.

t = (0,) * 5
print(t)
# (0, 0, 0, 0, 0)

Per il tipo di matrice, puoi passare l’elenco inizializzato al costruttore.

import array

a = array.array('i', [0] * 5)
print(a)
# array('i', [0, 0, 0, 0, 0])