Skip to main content
 首页 » 编程设计

python之列表的累积乘积

2025年05月04日13lidabo

我已经实现了一个包含一定数量的所有质数的列表。 我想做的事情很难解释,所以我将用一些硬代码来展示它:

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

所以本质上,我试图从我的 prev 列表中按顺序取出一个元素,然后按指数方式将它相乘,然后将它附加到我的其他列表。

我意识到我可以这样做,这可能更容易:

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 

我需要一些想法来在某种循环中执行此操作。

请您参考如下方法:

您想要一个累积产品的列表。这是一个简单的食谱:

>>> 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] 
>>>