Articolo originale: https://www.freecodecamp.org/news/python-array-tutorial-define-index-methods/

In questo articolo, imparerai come usare gli array in Python. Vedrai come definirli e i vari metodi comunemente usati per svolgere operazioni su di essi.

Tratteremo gli array che puoi creare importando il modulo array, ma non parleremo degli array NumPy.

Sommario

  1. Introduzione agli array
    1.1 Le differenze tra liste e array
    1.2 Quando usare gli array
  2. Come usare gli array
    2.1 Definire gli array
    2.2 Trovare la lunghezza di un array
    2.3 Indici
    2.4 Ricerca
    2.5 Loop
    2.6 Slicing
  3. Metodi per array
    3.1 Cambiare un valore esistente
    3.2 Aggiungere un nuovo valore
    3.3 Rimuovere un valore
  4. Conclusione

Iniziamo!

Cosa sono gli array in Python?

Gli array sono una struttura di dati fondamentale e una parte importante della maggioranza dei linguaggi di programmazione. In Python, sono dei contenitori in grado di conservare più di un elemento dello stesso tipo.

In modo specifico, sono degli insiemi ordinati di elementi dello stesso tipo di dato. Questa è la cosa più importante da ricordare sugli array in Python – possono contenere solo una sequenza di più elementi dello stesso tipo.

Qual è la differenza tra le liste e gli array in Python?

Le liste sono una delle strutture di dati più comuni in Python e fanno parte del nucleo del linguaggio.

Le liste e gli array hanno un comportamento simile.

Proprio come gli array, le liste sono una sequenza ordinata di elementi.

Sono mutabili e non hanno una dimensione fissa, che vuol dire che possono crescere e rimpicciolirsi durante la vita di un programma. Gli elementi possono essere aggiunti e rimossi, rendendole delle strutture molto flessibili con cui lavorare.

Tuttavia, le liste e gli array non sono la stessa cosa.

Le liste contengono elementi di vari tipi. Ciò vuol dire che una lista può contenere interi, decimali, stringhe o qualsiasi altro tipo di dato, contemporaneamente. Questo non vale per gli array.

Come menzionato nella sezione precedente, gli array contengono soltanto elementi dello stesso tipo di dato. Possono esistere array contenenti solo interi, solo decimali o soltanto uno degli altri tipi di dato esistenti in Python.

Quando usare gli array in Python

Le liste sono incorporate nel linguaggio Python, al contrario degli array, che non sono strutture di dati integrate e dunque devono essere importate tramite il modulo array per poter essere utilizzati.

Gli array del modulo array sono un wrapper sottile degli array in C e sono utili quando vuoi lavorare con dati omogenei.

Sono anche più compatti e occupano meno spazio in memoria, il che li rende più efficienti in termini di dimensioni rispetto alle liste.

Se vuoi svolgere operazioni matematiche, allora dovresti usare gli array NumPy, importando il pacchetto NumPy. A parte questo, dovresti usare gli array in Python soltanto quando ne hai davvero bisogno, dato che le liste funzionano in modo simile e sono più flessibili.

Come usare gli array in Python

Per creare degli array in Python occorre prima importare il modulo array che contiene le funzioni necessarie.

Esistono tre modi in cui puoi importare il modulo array:

  • Usando import array in cima al file. Ciò include il modulo array, consentendoti di creare array usando array.array().
import array

#come creare un array
array.array()
  • Per non digitare array.array() ogni volta, puoi usare import array as arr in cima al file, invece di usare solo import array. Poi potrai creare un array scrivendo arr.array(). arr agisce come un alias con il costruttore array() che lo segue subito dopo.
import array as arr

#come creare un array
arr.array()
  • Infine, puoi usare anche from array import *, dove * importa tutte le funzionalità disponibili. Potrai creare un array usando il solo costruttore array().
from array import *

#come creare un array
array()

Come definire un array in Python

Una volta che hai importato il modulo array, puoi definire un array.

La sintassi generale per creare un array è la seguente:

nome_variabile = array(typecode,[elementi])

Analizziamola:

  • nome_variabile sarà il nome dell'array.
  • Il typecode specifica che tipo di elemento sarà contenuto nell'array (intero, float o qualsiasi altro tipo di dato Python). Ricorda che tutti gli elementi devono essere dello stesso tipo.
  • All'interno delle parentesi quadre vanno inseriti gli elementi che saranno contenuti nell'array, con ogni elemento separato da una virgola. È anche possibile creare un array vuoto scrivendo nome_variabile = array(typecode) senza alcun elemento.

Di seguito puoi trovare una tabella con i vari typecode utilizzabili per definire i diversi tipi di dato di un array in Python:

TYPECODETIPO CTIPO PYTHONDIMENSIONE
'b'signed charint1
'B'unsigned charint1
'u'wchar_tUnicode character2
'h'signed shortint2
'H'unsigned shortint2
'i'signed intint2
'I'unsigned intint2
'l'signed longint4
'L'unsigned longint4
'q'signed long longint8
'Q'unsigned long longint8
'f'floatfloat4
'd'doublefloat8

Mettendo tutto insieme, ecco un esempio di come definire un array in Python:

import array as arr 

numeri = arr.array('i',[10,20,30])


print(numeri)

#output

#array('i', [10, 20, 30])

Analizziamo il codice:

  • Prima di tutto, includiamo il modulo array con import array as arr .
  • Poi creiamo l'array numeri.
  • Abbiamo usato arr.array() per via di import array as arr .
  • All'interno del costruttore array() includiamo i, per gli interi con segno, che includono sia valori positivi che negativi. Nel caso di interi senza segno, H, non sono ammessi valori negativi.
  • Infine, abbiamo incluso i valori da inserire nell'array tra parentesi quadre.

Tieni a mente che provando a includere valori che non corrispondono al typecode i otterrai un errore:

import array as arr 

numeri = arr.array('i',[10.0,20,30])


print(numeri)

#output

#Traceback (most recent call last):
# File "/Users/dionysialemonaki/python_articles/demo.py", line 14, in <module>
#   numeri = arr.array('i',[10.0,20,30])
#TypeError: 'float' object cannot be interpreted as an integer

Nell'esempio qui sopra, ho provato a includere un float nell'array. Ho ottenuto un errore perché l'array è destinato solo a valori interi.

Un altro modo per creare un array è il seguente:

from array import *

#un array di float
numeri = array('d',[10.0,20.0,30.0])

print(numeri)

#output

#array('d', [10.0, 20.0, 30.0])

Nell'esempio qui sopra il modulo array è stato importato tramite from array import * e poi è stato creato l'array numeri di tipo di dato float. Ciò vuol dire che l'array può contenere solo numeri decimali, specificati dal typecode 'd'.

Come trovare la lunghezza di un array in Python

Per trovare il numero esatto di elementi contenuti in un array, puoi usare il metodo integrato len().

Restituirà un numero intero uguale al numero totale di elementi nell'array specificato.

import array as arr 

numeri = arr.array('i',[10,20,30])


print(len(numeri))

#output
# 3

Nell'esempio qui sopra, l'array contiene tre elementi – 10, 20, 30 – quindi la lunghezza di numeri è 3.

Indici degli array e come accedere ai singoli elementi di un array in Python

Ogni elemento in un array ha delle coordinate specifiche. È possibile accedere ai singoli elementi facendo riferimento al loro indice numerico.

Gli indici in Python, e nei linguaggi di programmazione in generale, partono da 0. È importante ricordare che il conto parte da 0 e non da 1.

Per accedere a un elemento, occorre prima scrivere il nome dell'array seguito da parentesi quadre. All'interno delle parentesi quadre va incluso l'indice numerico dell'elemento.

La sintassi generale è la seguente:

nome_array[indice_elemento]

Ecco come accedere a ogni singolo elemento di un array:

import array as arr 

numeri = arr.array('i',[10,20,30])

print(numeri[0]) # 1° elemento
print(numeri[1]) # 2° elemento
print(numeri[2]) # 3° elemento

#output

#10
#20
#30

Ricorda che il valore dell'indice dell'ultimo elemento di un array è sempre uguale alla lunghezza dell'array meno uno. Dove n è la lunghezza dell'array, n - 1 sarà il valore dell'indice dell'ultimo elemento.

È possibile anche accedere a ogni elemento usando un indice negativo.

Considerando gli indici negativi, l'ultimo elemento avrà indice -1, il penultimo  -2 e via dicendo.

Ecco come accedere ai singoli elementi di un array con questo metodo:

import array as arr 

numeri = arr.array('i',[10,20,30])

print(numeri[-1]) #ultimo elemento
print(numeri[-2]) #penultimo elemento
print(numeri[-3]) #primo elemento
 
#output

#30
#20
#10

Come cercare in un array in Python

Puoi trovare l'indice numerico di un elemento usando il metodo index().

Occorre passare il valore dell'elemento oggetto della ricerca come argomento del metodo e verrà restituito l'indice dell'elemento.

import array as arr 

numeri = arr.array('i',[10,20,30])

#ricerca l'indice del valore 10
print(numeri.index(10))

#output

#0

Se c'è più di un elemento con lo stesso valore, sarà restituito l'indice della prima istanza del valore:

import array as arr 


numeri = arr.array('i',[10,20,30,10,20,30])

#ricerca l'indice del valore 10
#restituisce l'indice della prima istanza del valore 10
print(numeri.index(10))

#output

#0

Come iterare su un array in Python

Hai visto come accedere a ogni elemento in un array e stamparlo singolarmente.

Hai anche visto come stampare l'intero array usando il metodo print(). Questo metodo dà il seguente risultato:

import array as arr 

numeri = arr.array('i',[10,20,30])

print(numeri)

#output

#array('i', [10, 20, 30])

E se volessi stampare ogni valore uno alla volta?

È qui che tornano utili i loop. Puoi iterare su un array e stampare ogni valore, uno alla volta ad ogni iterazione del loop.

Per questo scopo puoi usare un semplice loop for:

import array as arr 

numeri = arr.array('i',[10,20,30])

for numero in numeri:
    print(numero)
    
#output
#10
#20
#30

Puoi anche usare la funzione range() passando il metodo len() come suo parametro, ottenendo il medesimo risultato:

import array as arr  

valori = arr.array('i',[10,20,30])

#stampa ogni valore nell'array
for valore in range(len(valori)):
    print(valori[valore])

#output

#10
#20
#30

Lo slicing di un array in Python

Per accedere a un intervallo specifico di valori all'interno di un array, si utilizza l'operatore di slicing, :.

Se usando l'operatore di slicing viene incluso un solo valore, il conteggio parte da 0 di default. Vengono selezionati gli elementi dal primo fino all'indice specificato (non incluso).


import array as arr 

#array originale
numeri = arr.array('i',[10,20,30])

#prende solo i valori 10 e 20
print(numeri[:2])  #le prime due posizioni

#output

#array('i', [10, 20])

Quando vengono passati due numeri come argomenti, viene specificato un intervallo. In questo caso il conteggio inizia dalla posizione corrispondente al primo numero nell'intervallo e termina con il secondo (non incluso):

import array as arr 

#array originale
numeri = arr.array('i',[10,20,30])


#prende solo i valori 20 e 30
print(numeri[1:3]) #secondo e terzo valore

#output

#array('i', [20, 30])

Metodi per svolgere operazioni sugli array in Python

Gli array sono mutabili, il che vuol dire che sono modificabili. Si può cambiare il valore di diversi elementi, aggiungerne di nuovi o eliminarne se non sono più necessari al programma.

Vediamo alcuni dei metodi usati più di frequente per svolgere operazioni sugli array.

Come cambiare il valore di un elemento in un array

È possibile cambiare il valore di uno determinato elemento specificando la sua posizione e assegnando un nuovo valore:

import array as arr 

#array originale
numeri = arr.array('i',[10,20,30])

#cambia il primo elemento
#dal valore 10 al valore 40
numeri[0] = 40

print(numeri)

#output

#array('i', [40, 20, 30])

Come aggiungere un nuovo valore a un array

Per aggiungere un singolo valore alla fine di un array, utilizza il metodo append():

import array as arr 

#array originale
numeri = arr.array('i',[10,20,30])

#aggiunge l'intero 40 alla fine di numeri
numeri.append(40)

print(numeri)

#output

#array('i', [10, 20, 30, 40])

Stai attento a far combaciare il tipo dell'elemento che aggiungi con quello del resto degli elementi dell'array.

Guarda cosa accade se provi ad aggiungere un float a un array di interi:

import array as arr 

#array originale
numeri = arr.array('i',[10,20,30])

#aggiunge il float 40.0 alla fine di numeri
numeri.append(40.0)

print(numeri)

#output

#Traceback (most recent call last):
#  File "/Users/dionysialemonaki/python_articles/demo.py", line 19, in <module>
#   numeri.append(40.0)
#TypeError: 'float' object cannot be interpreted as an integer

E se dobbiamo aggiungere più di un valore alla fine di un array?

Possiamo usare il metodo extend(), che accetta un iterabile (come una lista di elementi) come argomento. Di nuovo, assicurati che i nuovi elementi siano dello stesso tipo di dato.

import array as arr 

#array originale
numbers = arr.array('i',[10,20,30])

#aggiunge gli interi 40,50,60 alla fine di numeri
#i valori devono essere inseriti tra parentesi quadre

numeri.extend([40,50,60])

print(numeri)

#output

#array('i', [10, 20, 30, 40, 50, 60])

Se invece non vuoi aggiungere un elemento alla fine di un array, usa il metodo insert() così da aggiungerlo in corrispondenza di una posizione specifica.

La funzione insert() prende due argomenti: l'indice numerico della posizione in cui sarà inserito il nuovo elemento e il valore del nuovo elemento.

import array as arr 

#array originale
numeri = arr.array('i',[10,20,30])

#aggiunge l'intero 40 nella prima posizione
#ricorda che gli indici partono da zero

numeri.insert(0,40)

print(numeri)

#output

#array('i', [40, 10, 20, 30])

Come rimuovere un valore da un array

Per rimuovere un elemento da un array, usa il metodo remove() e includi il valore dell'elemento come suo argomento.

import array as arr 

#array originale
numeri = arr.array('i',[10,20,30])

numeri.remove(10)

print(numeri)

#output

#array('i', [20, 30])

Il metodo remove() rimuove solo la prima istanza del valore passatogli come argomento.

Guarda cosa accade se ci sono più valori identici:


import array as arr 

#array originale
numeri = arr.array('i',[10,20,30,10,20])

#rimuove la prima istanza di 10
numeri.remove(10)

print(numeri)

#output

#array('i', [20, 30, 10, 20])

Viene rimossa soltanto la prima istanza di 10.

Puoi anche usare il metodo pop() e specificare la posizione dell'elemento da rimuovere:

import array as arr 

#array originale
numeri = arr.array('i',[10,20,30,10,20])

numeri.pop(0)

print(numeri)

#output

#array('i', [20, 30, 10, 20])

Conclusione

Ed ecco fatto – adesso conosci le basi di come creare degli array in Python usando il modulo array. Spero che questa guida ti sia stata d'aiuto.

Per imparare di più su Python, dai un'occhiata alla certificazione di freeCodeCamp Calcolo scientifico con Python.

Partirai dalle basi e imparerai in un modo interattivo e adatto a un principiante. Alla fine dovrai anche creare cinque progetti per mettere in pratica le tue conoscenze e consolidarle.

Grazie per aver letto e buona programmazione!

Riferimenti: documentazione Python