Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2023-24 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 2023-24 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.

List Comprehension che esegue più espressioni, è possibile?

Auron (15880 points)
50 126 194
in Programmare in Python by (15.9k points)
Come da titolo, è possibile creare una List Comprehension che esegua due espressioni?
Mi spiego... la struttura di una tipica L.C. condizionata è:         
                     [<expression> for <element> in <sequence> if <condition>]
E' possibile inserire nell'expression più comandi?

Situazione:Ho un ciclo in lista che al verificarsi di una condizione deve incrementare una variabile e breakare... Posso inserire questo break nella L.C.? Se sì, come?
750 views

2 Answers

gianpcr (4620 points)
5 16 34
by (4.6k points)
edited by
Ciao, da quello che so non puoi usare il break in una list comprehension. Per eseguire più comandi puoi passare una funzione alla <expression>. Per "simulare" il break, puoi usare l'eccezione "StopIteration" che una volta attivata interrompe l'iterazione corrente. Per fare un catch di quella eccezione devi inserire la list comprehension all'interno della funzione list.  Nonostante tutto il mio consiglio in questi casi è di evitare la list comprehension.
francesco.dev (33560 points)
21 51 129
by (33.6k points)
Bella risposta!
francesco.dev (33560 points)
21 51 129
by (33.6k points)
Ciao Auron!
Non so se sia possibile mettere vere e proprie espressioni complesse all'interno, però ti posso confermare assolutamente che come espressione ciò che puoi inserire è un qualsiasi tipo di variabile!
Pensa ad una lista fatta di liste annidate, se scrivessi: x for y in lista.... La x è esattamente una lista annidata!

Quindi, infine, non so la concreta realizzazione di quanto dici. Io ad esempio tempo fa cercavo un modo per mettere un corpo di istruzioni qualora la if della list comprehension risultasse vera.

Spero di averti aiutato entrando nel dettaglio dell'espressione (forse già lo sapevi, ma molti di noi no! :D )

Aspettiamo gli altri o il docente per informazioni maggiori
A presto,
- Francesco Pio Scognamiglio
Auron (15880 points)
50 126 194
by (15.9k points)
Si, sapevo come funzionava, e sto cercando di fare esattamente quello che cercavi di fare tu, ovvero 'se la if è vera fammi questo1 e questo2'... e 'questo2' è un 'break'...
francesco.dev (33560 points)
21 51 129
by (33.6k points)
Sei riuscito a mettere almeno il 'questo1'?
Perché io ho provato con: [x for x in lista: if x==3]
Ma dopo la if se metto i due punti e l'istruzione non lo prende!