2011-12-26 9 views
8

que sepa cómo flatmap toma una secuencia de elementos y convierte cada una en una nueva subsecuencia, sumando todas las subsecuencias:¿Opcionalmente opuesto a flatmap?

[A, B, C] -> [A1, A2, B1, B2, B3, C1] 

¿Hay un nombre para el archivo de transformación, que hace lo contrario? Algo así como:

[A1, A2, B1, B2, B3, C1] -> [A, B, C] 

El ejemplo específico que me hizo pensar acerca de este estaba haciendo la evaluación de las expresiones matemáticas:

1 * 2 + 3 * 4 + 5 + 6 * 7 * 8 
-> 2 + 12 + 5 + 6 + 336 
-> 361 

Individualmente, la evaluación de la 6 * 7 * 8 parece una reduce etapa clásica, mientras que decidir qué los bloques deben reducirse necesitarían repetidos pasos takeWhile.

Sé cómo hacerlo de forma iterativa clásica, haciendo un seguimiento de los índices y todo eso. Para la mayoría de los casos, he encontrado un buen reemplazo funcional para la mayoría de los patrones iterativos. ¿Hay un nombre para una sola operación que hace esto, o un simple conjunto de operaciones que se pueden componer para crear este efecto?

Respuesta

6

Creo que lo contrario de flatmap es groupby.

$ python3 
>>> from itertools import groupby 
>>> groupby(['A1', 'A2', 'B1', 'B2', 'B3', 'C1'], lambda x: x[0]) 
+0

Esto debe marcarse como correcto. – Robert