计算列表的所有组合的产品[重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

我有一个11个数字的列表,我想测试所有组合的产品对一些规则(2 ^ 11种可能性)。

我遇到了this SO question,但它似乎返回了所有组合的列表,我认为这将占用大量内存。

我的C ++思想是通过每个二进制数0x0010x7FF并将每个数字乘以其相应的位为1。

4个数字的示例:我的列表是[2, 3, 5, 7]

第一个二进制数将是0001给出 - 2 = 2

稍后我们将到达1110,产品将是3 * 5 * 7 = 105

python有更好的方法吗?有点操纵似乎不是正确的方法。

python combinatorics
1个回答
1
投票

可能不是最好的解决方案,但应该没有长列表的内存问题(正如在评论中所说,使用迭代(使用“功能”方法)不应该让你招致内存问题)。

import itertools
from functools import partial
import numpy as np

my_list = [1,3,5,7,9,11,13,15,17,19,21]

# define helper partial function useful to return an iterable of combinations with r elements
combinations_with_r = partial(lambda r: itertools.combinations(my_list, r = r))

# generate all combinations, print them with their products
for r in map(combinations_with_r, range(1, len(my_list) + 1)):
    for j in r:
        print(j, np.prod(j))

编辑:您可以声明my_list = np.array([1,3,5,7,9,11,13,15,17,19,21], dtype = 'int64')以缓解溢出问题。

© www.soinside.com 2019 - 2024. All rights reserved.