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步骤.
我知道如何以经典的迭代方式做到这一点,跟踪索引和所有这些.对于大多数情况,我发现大多数迭代模式都有一个很好的功能替代品.是否存在执行此操作的单个操作的名称,或者可以组合以创建此效果的一组简单操作?
我认为的相反flatmap的groupby.
$ python3
>>> from itertools import groupby
>>> groupby(['A1', 'A2', 'B1', 'B2', 'B3', 'C1'], lambda x: x[0])
Run Code Online (Sandbox Code Playgroud)