计算n个列表的所有可能组合的总和,并检查与特定值的比较

我想编写一个代码(在python 3中),它能够计算不同数量列表的所有可能组合的总和。总和的结果需要用指定的值进行检查。对于总和合计为指定值的所有组合,我想创建一个仅包含这些值的新列表。计算n个列表的所有可能组合的总和,并检查与特定值的比较

例如:

value = 5 

a = [1, 2, 3, 4]

b = [2, 3, 4, 5]

1 + 2 = 3 - x

1 + 3 = 4 - x

1 + 4 = 5 - correct

1 + 5 = 6 - x

2 + 2 = 4 - x

2 + 3 = 5 - correct

...

的结果应该是,例如:

res = [[1, 4], [2, 3], [3, 2], [4, 1]] 

我知道,一个简单的办法是嵌套的for循环使用。问题是,在编写代码的时候,我不知道会有多少列表,导致需要定义所有可能的情况。这是我不想做的事情。当我运行代码时,我知道有多少个列表。列表的长度将始终相同(26个元素)。

需要检查的列表以下列方式存储在列表中。例如:

list = [[1, 2, 3, 4], [2, 3, 4, 5]] 

一组实际列出的,我想解决这个问题的一个例子是:

list = [[0, 2, 0, 0, 5, 0, 0, 8, 0, 0, 11, 0, 0, 14, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 2, 0, 0, 5, 0, 0, 8, 0, 0, 11, 0, 0, 14, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0]] 

所有的零个值在总数其他改进的结果的选项不符合其他标准。

我希望有人能把我推向正确的方向。 在此先感谢!

回答:

随着名单l的一些列表(没有名字的东西list,有一个内置的名为list功能)

l = [[1, 2, 3, 4], [2, 3, 4, 5]] 

我们可以使用itertools.product来获取列表之间项目的所有组合,然后mapsum功能到这些组合。然后检查会员是很容易的。

from itertools import product 

if value in map(sum, product(*l)):

print('Yes!')

else:

print('No :(')

如果你想保存多张支票的金额,我建议您将它们保存到一组

sum_set = set(map(sum, product(*l))) 

if value in sum_set:

...

product(*l)*需要的是拆包经营者。它将lproduct的元素作为单个参数给出product([1,2,3,4], [2,3,4,5])

以上是 计算n个列表的所有可能组合的总和,并检查与特定值的比较 的全部内容, 来源链接: utcz.com/qa/264881.html

回到顶部