清单的累计积

发布于 2021-01-29 14:59:50

我已经实现了一定数量的所有素数的列表。我试图做的事情很难解释,所以我只用一些硬代码展示一下:

euclst = []
euclst.append((primelst[0]) + 1)
euclst.append((primelst[0] * primelst[1]) + 1)
euclst.append((primelst[0] * primelst[1] * primelst[2]) + 1)
....

所以从本质上讲,我试图从上一个列表中按顺序取出一个元素,然后按指数倍增,然后将其追加到其他列表中。

我意识到我可以做到这一点,这可能会更容易:

euclst = []
euclst.append(primelst[0])
euclst.append(primelst[0] * primelst[1])
euclst.append(primelst[0] * primelst[1] * primelst[2])
....
#then add one to each element in the list later

我需要一些想法才能在某种程度上做到这一点。

关注者
0
被浏览
92
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您需要 累积产品 清单。这是一个简单的食谱:

    >>> primelist =  [2, 3, 5, 7, 11, 13, 17, 19, 23]
    >>> euclist = []
    >>> current = 1
    >>> for p in primelist:
    ...     current *= p
    ...     euclist.append(current)
    ...
    >>> euclist
    [2, 6, 30, 210, 2310, 30030, 510510, 9699690, 223092870]
    >>>
    

    另一种方法,使用itertools:

    >>> import itertools
    >>> import operator
    >>> list(itertools.accumulate(primelist, operator.mul))
    [2, 6, 30, 210, 2310, 30030, 510510, 9699690, 223092870]
    >>>
    

    或者,也许这就是您的意思:

    >>> [x + 1 for x in itertools.accumulate(primelist, operator.mul)]
    [3, 7, 31, 211, 2311, 30031, 510511, 9699691, 223092871]
    

    使用等效的for循环:

    >>> euclist = []
    >>> current = 1
    >>> for p in primelist:
    ...     current = current*p
    ...     euclist.append(current + 1)
    ...
    >>> euclist
    [3, 7, 31, 211, 2311, 30031, 510511, 9699691, 223092871]
    >>>
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看