【问题标题】:Use None as initial for itertools.accumulate使用 None 作为 itertools.accumulate 的初始值
【发布时间】:2021-05-09 09:45:17
【问题描述】:

最好将itertools.accumulateinitial=None 一起使用,字面意思是它应该以None 开头。

例如:

from typing import Optional, Iterable
from itertools import islice, accumulate

def f(a: Optional[A], b: B) -> A:
    pass

b_s: Iterable[B] = [...]
_a_s = accumulate(b_s, f, initial=None)  # doesn't work!
a_s = list(islice(_a_s, 1, None))

这失败了,因为initial=None 告诉accumulate 使用第一个元素作为初始元素并从那里开始,所以f 最终会被两个B 参数调用。

有人知道解决这个问题的简单方法吗?
我目前的计划是使用False,但是我还有很多麻烦可以解释我对 MyPy 所做的事情。

【问题讨论】:

    标签: python python-3.x functional-programming itertools


    【解决方案1】:

    您最好的选择可能是将chain 的值添加到输入迭代中:

    output = accumulate(chain([None], iterable), f)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-27
      • 2019-10-20
      • 2020-05-23
      • 1970-01-01
      • 2018-07-31
      • 2015-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多