01 Incontro del 30-11-24

Scritto da

in

Gli appunti dell’incontro del gruppo di approfondimento del linguaggio Python.

Le liste

La lista, o elenco, è un insieme ordinato di più elementi in un’unica variabile; essa vienecreata utilizzando le parentesi quadre; ad esempio:

invitati = ['Giovanni', 'Michelangelo', 'Riccardo', 'Angelo']
print(invitati)

[‘Giovanni’, ‘Michelangelo’, ‘Riccardo’, ‘Angelo’]

Le parentesi quadre indicano l’inizio e la fine della lista.

È possibile creare una lista vuota, []

Gli elementi della lista sono

  • ordinati,
    cioè gli elementi hanno un ordine definito e sono indicizzati (ognuno memorizzato per posizione)
  • modificabili,
    sono mutabili, cioè è possibile aggiungere o rimuovere elementi dopo che la lista è stata creata; se si aggiungono nuovi elementi, questi verranno posti alla fine della lista
  • consentono valori duplicati, ciò è possibile poiché gli elementi sono distinti per l’indice e non per il valore
  • possono essere di qualsiasi tipo di dati, anche un’altra lista1
  • non necessariamente omogenee; cioè possono essere anche di tipo diverso fra loro

In Python le liste sono definite come oggetti di tipo list e possono essere passati come attributi di funzioni.

Il ciclo for che abbiamo visto per le stringhe è applicabile anche alle liste.

�Esercizio

Scrivere una lista di numeri interi ed un programma che, con il ciclo for, sommi tutti i suoi elementi.

Una possibile soluzione

lista = [3, 6, 9, 12, 15]
somma = 0
for numero in lista:#per ciascun numero presente in lista
  somma += numero
print(f"Il risultato della somma è {somma}")
# print(sum(lista))

�Esercizio

Scrivere un programma che moltiplichi tra loro tutti gli elementi di una lista diversi da zero.

Una possibile soluzione

lista = [3, 6, 9, 12, 15]
prodotto = 1
for numero in lista:
  if numero != 0:
      prodotto *= numero
print(f"Il risultato della moltiplicazione fra tutti gli elementi della lista è {prodotto}")

�Esercizio

Scrivere una funzione che, data una lista di numeri, disegni un istogramma orizzontale con il carattere speciale █ (FULL BLOCK)

numeri = [3, 9, 6, 15]
def istogramma(lista):
  for numero in lista:
    print("█" * numero)
    # print(chr(9608) * numero)
istogramma(numeri)

Risultato

███

█████████

██████

███████████████

� Esercizio

Scrivere una lista di numeri interi ed un programma che, senza usare la funzione max(), ne visualizzi il più grande utilizzando il for e l’if.

Una possibile soluzione

numeri = [42, 9, 23, 11, 17, 56, 3]
massimo = numeri[0]
for numero in numeri:
  if numero > massimo:
    massimo = numero
print(f"Il numero maggiore della lista {numeri} è: {massimo}")
# print(max(numeri))

Accesso agli elementi di una lista

Proprio perché gli elementi della lista sono indicizzati, è possibile accedervi facendo riferimento al loro indice2; si tenga presente che il primo di essi ha indice 0 e non 1. All’uopo si fa uso dell’operatore porzione [ ] o slicing.

Esempi:

lista = ['Giovanni', 20, 'Riccardo', True]
print(lista[2]) # terzo elemento della lista (1)
print(lista[0:2]) # primo e secondo elemento della lista (2)
print(lista[:2]) # primo e secondo elemento della lista (3)
print(lista[1:4]) # secondo, terzo e quarto elemento (4)
print(lista[1:]) # dal secondo all'ultimo elemento (5)
print(lista[-1]) # dall'ultimo a ritroso (6)

Risultati

Riccardo # (1)

[‘Giovanni’, 20] # (2)

[‘Giovanni’, 20] # (3)

[20, ‘Riccardo’, True] # (4)

[20, ‘Riccardo’, True] # (5) True # (6)

Dagli esempi si evince:

  • è possibile specificare un intervallo di indici indicandone l’inizio e la fine:il valore restituito sarà ancora una lista costituita dagli elementi individuati mediante gli indici
  • a differenza dell’elemento avente come indice il limite inferiore dell’intervallo il quale viene incluso nella nuova lista, l’elemento avente come indice l’estremo superiore viene escluso
  • se viene omesso il limite inferiore dell’intervallo, la nuova lista inizierà dal primo elemento, cioè quello di indice 0
  • se viene omesso il limite superiore dell’intervallo, la nuova lista inizierà dall’elemento avente per indice l’estremo inferiore e proseguirà fino all’ultimo elemento della lista
  • se si indicano indici negativi, la ricerca inizia dalla fine della lista
  • se si indica un intervallo con estremi negativi, in questo caso viene escluso l’elemento avente per indice l’estremo inferiore.

Per controllare se Giovanni è presente nella lista degli invitati, si può ricorrere all’operatore booleano3 in; tre esempi:

Esempio 1

invitati = ['Giovanni', 'Michelangelo', 'Riccardo', 'Angelo']
x = 'Giovanni' in invitati
print(x)

Risultato

True

Esempio 2

invitati = ['Giovanni', 'Michelangelo', 'Riccardo', 'Angelo']
if 'Giovanni' in invitati:
  print('Giovanni è nella lista degli invitati')

Risultato:

Giovanni è nella lista degli invitati

Angelo G. ha proposto che sia l’utente a digitare l’elemento per il quale determinare l’appartenenza o meno alla lista con il seguente codice:

invitati = ["Angelo","Federico","Giovanni","Marta"]
x = input("E' tra gli invitati? ")
if x in invitati:
  print(f"{x} è tra gli invitati")
else:
  print(f"{x} non è tra gli invitati")

Anche combinando not con in, è possibile sapere se un elemento non è contenuto nella lista:

Esempio 3

invitati = ['Giovanni', 'Michelangelo', 'Riccardo', 'Angelo']
if 'Giuseppe' not in invitati:
  print('Giuseppe non è stato invitato')

Risultato

Giuseppe non è stato invitato

E se si vuol sapere il numero degli elementi della lista? Basta usare la la funzione integrata len()

invitati = ['Giovanni', 'Michelangelo', 'Riccardo', 'Angelo']
print(len(invitati))

Risultato

4

______________________

NOTE

1 In tal caso si parla di lista annidata.

2 Un indice può essere sia un numero intero, sia una espressione che produca un numero intero.

3 Nel senso che restituisce vero o falso.