与flatmap相反的功能?

Li *_*oyi 9 functional-programming

您知道flatmap如何获取一系列项目并将每个项目转换为新的子序列,聚合所有子序列:

[A, B, C] -> [A1, A2, B1, B2, B3, C1]
Run Code Online (Sandbox Code Playgroud)

变换的名称是否相反?就像是:

[A1, A2, B1, B2, B3, C1] -> [A, B, C]
Run Code Online (Sandbox Code Playgroud)

让我思考这个问题的具体例子就是对数学表达式进行评估:

   1 * 2 + 3 * 4 + 5 + 6 * 7 * 8 
-> 2 + 12 + 5 + 6 + 336 
-> 361
Run Code Online (Sandbox Code Playgroud)

单独地,评估6 * 7 * 8似乎是一个经典reduce步骤,而决定需要减少哪些块需要重复takeWhile步骤.

我知道如何以经典的迭代方式做到这一点,跟踪索引和所有这些.对于大多数情况,我发现大多数迭代模式都有一个很好的功能替代品.是否存在执行此操作的单个操作的名称,或者可以组合以创建此效果的一组简单操作?

kev*_*kev 9

我认为的相反flatmapgroupby.

$ python3
>>> from itertools import groupby
>>> groupby(['A1', 'A2', 'B1', 'B2', 'B3', 'C1'], lambda x: x[0])
Run Code Online (Sandbox Code Playgroud)