计算lis所有组合的乘积

2024-03-29 06:09:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个11个数字的列表,我想根据一些规则(2^11个可能性)测试所有组合的乘积。在

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

<>我的C++思想是把每一个二进制数^ {< CD1>}到^ {CD2>},并在其对应的位为1的情况下乘以每个数。在

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

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

稍后我们将得到1110,得到的结果是3 * 5 * 7 = 105

python中是否有更好的方法来完成此操作?一点点的操纵似乎不是正确的方法。在


Tags: 方法内存列表so规则二进制情况数字
1条回答
网友
1楼 · 发布于 2024-03-29 06:09:42

可能不是最好的解决方案,但是它应该可以在没有内存问题的情况下使用长列表(正如评论中所说,使用iterables(使用“函数式”方法)不应该导致内存问题)。在

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')来缓解溢出问题。在

相关问题 更多 >