chicos. Intento encontrar la solución más elegante para un problema y me pregunto si Python tiene algo incorporado para lo que estoy tratando de hacer.comprensión de la lista de Python; ¿Comprimir una lista de listas?
Lo que estoy haciendo es esto. Tengo una lista, A
, y tengo una función f
que toma un elemento y devuelve una lista. Puedo usar una lista de comprensión para convertir todo en A
como tal;
[f(a) for a in A]
Pero esto arroja una lista de listas;
[a1,a2,a3] => [[b11,b12],[b21,b22],[b31,b32]]
Lo que realmente quiero es conseguir la lista aplanado;
[b11,b12,b21,b22,b31,b32]
Ahora, otros idiomas tienen que; tradicionalmente se llama flatmap
en lenguajes de programación funcionales, y .Net lo llama SelectMany
. ¿Python tiene algo similar? ¿Hay una forma ordenada de asignar una función sobre una lista y aplanar el resultado?
El problema real que estoy tratando de resolver es esto; comenzando con una lista de directorios, encuentre todos los subdirectorios. asi que;
import os
dirs = ["c:\\usr", "c:\\temp"]
subs = [os.listdir(d) for d in dirs]
print subs
currentliy me da una lista de listas de tareas, pero realmente quiero una lista.
Aunque inteligente, es difícil de entender y poco legible. –
Realmente no responde la pregunta como se le preguntó. Esto es más bien una solución para no encontrar el problema en primer lugar. ¿Qué pasa si ya tiene una lista de listas? Por ejemplo, ¿qué pasa si su lista de listas es un resultado de la función de mapa del módulo de multiprocesamiento? Quizás la solución de itertools o la solución de reducción sea la mejor. – Dave31415
Dave31415: '[item for list in listoflists para item in list]' – rampion