我已经实现了一定数量的所有素数的列表。我试图做的事情很难解释,所以我只用一些硬代码展示一下:
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
我需要一些想法才能在某种程度上做到这一点。
您需要 累积产品 清单。这是一个简单的食谱:
>>> 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] >>>