ragazzi. Sto cercando di trovare la soluzione più elegante per un problema e mi chiedevo se Python avesse qualcosa di integrato per quello che sto cercando di fare.python list comprehensions; comprimere un elenco di elenchi?
Quello che sto facendo è questo. Ho una lista, A
, e ho una funzione f
che accetta un elemento e restituisce una lista. Posso usare una lista di comprensione per convertire tutto in A
in questo modo;
[f(a) for a in A]
Ma questo restituisce un elenco di elenchi;
[a1,a2,a3] => [[b11,b12],[b21,b22],[b31,b32]]
Quello che voglio veramente è ottenere la lista appiattita;
[b11,b12,b21,b22,b31,b32]
Ora, altri linguaggi ce l'hanno; è tradizionalmente chiamato flatmap
in linguaggi di programmazione funzionale e .Net lo chiama SelectMany
. Python ha qualcosa di simile? C'è un modo pulito per mappare una funzione su un elenco e appiattire il risultato?
Il vero problema che sto cercando di risolvere è questo; iniziando con un elenco di directory, trova tutte le sottodirectory. così;
import os
dirs = ["c:\\usr", "c:\\temp"]
subs = [os.listdir(d) for d in dirs]
print subs
currentliy mi dà una lista-di-liste, ma voglio davvero una lista.
Anche se intelligente, difficile da capire e poco leggibile. –
In realtà non risponde alla domanda come richiesto. Questo è piuttosto una soluzione alternativa per non incontrare il problema in primo luogo. Cosa succede se hai già una lista di liste. Ad esempio, cosa succede se il tuo elenco di elenchi è il risultato della funzione mappa del modulo multiprocesso? Forse la soluzione itertools o la soluzione di riduzione è la migliore. – Dave31415
Dave31415: '[voce per l'elenco in listofliste per la voce in elenco]' – rampion