繁体   English   中英

使用 None 作为 itertools.accumulate 的初始值

[英]Use None as initial for itertools.accumulate

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使用第一个元素作为初始元素和 go 从那里开始,所以f最终会被两个B arguments 调用。

有谁知道解决这个问题的简单方法?
我目前的计划是使用False ,但是我有更多的障碍可以解释我对 MyPy 所做的事情。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM