les gars. J'essaie de trouver la solution la plus élégante à un problème et me demande si python a quelque chose de intégré pour ce que j'essaie de faire.compréhension de la liste python; compresser une liste de listes?
Ce que je fais est ceci. J'ai une liste, A
, et j'ai une fonction f
qui prend un article et renvoie une liste. Je peux utiliser une compréhension de liste pour tout convertir en A
comme ça;
[f(a) for a in A]
Mais cela retourne une liste de listes;
[a1,a2,a3] => [[b11,b12],[b21,b22],[b31,b32]]
Ce que je veux vraiment, c'est obtenir la liste aplatie;
[b11,b12,b21,b22,b31,b32]
Maintenant, d'autres langues l'ont; il est traditionnellement appelé flatmap
dans les langages de programmation fonctionnels, et .Net l'appelle SelectMany
. Est-ce que python a quelque chose de similaire? Existe-t-il une manière ordonnée de mapper une fonction sur une liste et d'aplatir le résultat?
Le problème que j'essaie de résoudre est le suivant: en commençant par une liste de répertoires, trouvez tous les sous-répertoires. alors;
import os
dirs = ["c:\\usr", "c:\\temp"]
subs = [os.listdir(d) for d in dirs]
print subs
currentliy me donne une liste-des-listes, mais je veux vraiment une liste.
intelligent, c'est difficile à comprendre et pas très lisible. –
Ne répond pas vraiment à la question posée. C'est plutôt une solution de contournement pour ne pas rencontrer le problème en premier lieu. Que faire si vous avez déjà une liste de listes. Par exemple, que se passe-t-il si votre liste de listes est le résultat de la fonction de carte du module multitraitement? Peut-être que la solution d'itertools ou la solution de réduction est la meilleure. – Dave31415
Dave31415: '[élément de liste dans listoflists pour élément dans la liste]' – rampion