将连续整数列表的每个可能子集中的整数相乘

Multiplying integers in each possible subset of a consecutive list of integers

我有以下整数列表:

prime_factors = [2,3,5,7,11,13,17,19,23]

将每个连续整数子集的元素相乘的有效方法是什么?

为了进一步说明,我需要输出包括以下乘法的结果:2*33*52*3*513*17*197*11*13*17*192*3*5*7*11*13*17*19*23 和所有其他可能的连续素数组合。输出不应包括 2*55*7*13

您可以使用 itertools.accumulate 执行此操作。

from itertools import accumulate
from operator import mul

def consec_mult(data):
    for i in range(len(data) - 1):
        it = accumulate(data[i:], mul)
        # Skip the single item
        next(it)
        yield from it

# Test

prime_factors = [2, 3, 5, 7, 11]
print(*consec_mult(prime_factors))

输出

6 30 210 2310 15 105 1155 35 385 77

或者如果您希望结果按数字顺序排序:

print(*sorted(consec_mult(prime_factors)))

输出

6 15 30 35 77 105 210 385 1155 2310