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

Do you need help?

Notice Board

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!