Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2021-22 loggatevi e attivatelo nella vostra pagina dei corsi preferiti. A quel punto il corso appare nel menù personale cliccando sul proprio avatar. Per i materiali degli anni precedenti seguite lo stesso metodo.

To join the Programming/Lab 2021-22 course, log-on and select it on the my courses page. It will appear on the personal menu of your avatar. For earlier years use the same method.

VIDEOLEZIONI DEL CORSO DI FONDAMENTI DI PROGRAMMAZIONE AA20-21

PROGRAMMING COURSE VIDEOCONFERENCES AY20-21

Liste annidate

francesco.dev (33560 points)
14 51 129
in Programmare in Python by (33.6k points)

Buonasera a tutti!

Stavo studiando un po' le liste e mi è sorto un dubbio che forse a molti di noi sorgerà approfondendo questo argomento:
Partendo dal presupposto che una lista contiene elementi non per forza dello stesso tipo (e quindi può contenere elementi non omogenei):
Quando creiamo una lista che contiene una serie di numeri e una lista annidata, come facciamo a raggiungere la posizione degli elementi presenti nella lista annidata?

Chiunque può rispondermi, anche a livello logico e nei commenti, insieme, cercheremo di arrivare ad una soluzione.
Io già mi son fatto qualche idea, basandomi anche sul vecchio e caro C.
Quindi aspetto le vostre risposte, sperando che questa volta la domanda non venga votata negativamente :D !


Ancora buona serata,
- Francesco Pio Scognamiglio

1.1k views
closed

2 Answers

Best answer
V
Vlad (4580 points)
2 14 24
by (4.6k points)
selected by

Ciao!

Per accedere agli elementi della tua lista annidata basta usare un doppio indice tra parentesi quadre: mia_lista[indice1][indice2]

come esempio prendiamo una lista (chiamiamola mia_lista) composta da 3 liste (chiamiamole lista_a, lista_b, lista_c):

[ ['a0','a1','a2'],['b0', 'b1'],['c0','c1','c2','c3'] ]

indice1 si riferisce alla lista , indice2 all'elemento di suddetta lista.

quindi se indice1 è =0 sto parlando della lista_a, se =1 mi riferisco alla lista_b, se =2 allora sto lavorando sulla lista_c

indice2 va a scorrere gli elementi di queste 3 liste
 

quindi se provo a stampare mia_lista[0][2] in output avrò l'elemento con indice 2 della lista_a, cioè 'a2'

se provo a stampare mia_lista[2][0] in output avrò l'elemento con indice 0 della lista_c, cioè 'c0'

se invece provo a stampare mia_lista[1][2] ricevo un messaggio di errore del tipo "index out of range", perchè la lista_b ha solamente gli elementi b0 e b1

spero di essermi spiegato in maniera chiara

francesco.dev (33560 points)
14 51 129
by (33.6k points)
Esatto!
Proprio quello che pensavo! Grazie mille della spiegazione
Proprio dal C avevo pensato al concetto di matrice per risolvere tale problema!
LeonardoEmili (35740 points)
11 65 155
by (35.7k points)

Buonasera a te!
Veniamo al dunque..se ho capito ben capito il quesito era: come raggiungere gli elementi di una lista annidata all'interno di un'altra lista, è corretto?
In Python per spostarci all'interno dalle liste utilizziamo le parentesi quadre e al suo interno l'indice, il meccanismo che ci permette di entrare all'interno dell'elemento sono dunque le [index]. Una volta raggiunto l'elemento lista con tale notazione nulla ci vieta di inserire ancora due parentesi quadrate per "navigare" all'interno degli elementi della seconda lista. Il ragionamento potrebbe continuare all'infinito e come hai già ben precisato tu dall'inizio le liste in Python altro non sono che collezioni ordinate di valori eterogenei , ordinate perché ogni elemento al suo interno è raggiungibile grazie al suo indice,  quindi al loro interno possiamo trovare qualsiasi elemento dai numeri alle stringhe, dalle tuple alle liste.
Riassumendo per navigare all'interno di una lista utilizziamo le parentesi quadrate e all'interno della lista annidata altre parentesi quadrate per raggiungere l'elemento a posizione i.

Buon coding!

Leonardo Emili

francesco.dev (33560 points)
14 51 129
by (33.6k points)
Quindi quello che tu consiglieresti sarebbe usare la seguente pseudo sintassi: [index1[index2]] per poter interagire con la posizione di un elemento presente in una lista annidata?
LeonardoEmili (35740 points)
11 65 155
by (35.7k points)
Esatto, la trovo una notazione molto semplice e schematica nonché immediata poiché ti permette di visualizzare da subito come è strutturata la lista!
francesco.dev (33560 points)
14 51 129
by (33.6k points)
Non mi sembra la soluzione più immediata, a parer mio lavorerei come se avessi una matrice.
Oggi provo e poi vi dico qual è la sintassi corretta.
LeonardoEmili (35740 points)
11 65 155
by (35.7k points)
Leggendo bene il tuo commento ho realizzato ora che avevi capito che la sintassi fosse lista[index[index]], avevo letto male rispondendoti di si. Se leggi meglio la mia risposta la sintassi è quella corretta nonché quella di cui parlava anche Vlad.
francesco.dev (33560 points)
14 51 129
by (33.6k points)
Ok, allora c'è stato un fraintendimento!
francesco.dev (33560 points)
14 51 129
by (33.6k points)
Perché pensavo  che tu avessi detto quello che poi, erroneamente, mi hai confermato
Quindi avevi ragione anche tu!