繁体   English   中英

如何查找列表中所有产品的不同组合的总和(python)

[英]How to find sum of different combinations of all products in list (python)

我有以下两个 python 数字列表:

list1 = [0, 2, 5, 10, 20, 50, 100]
list2 = [2, 4, 6, 8, 10, 20]

我可以得到每个如下的产品:

combo = list(product(list1, list2))

然后我有一个 class 在这里我创建了一个方法,它只是两个列表中给定元素的乘积的正负(取决于其他 class 变量),例如

class1 = class.method(x, y)
class1 = class.method(list1[1], list2[5])
class1 = class.method(2, 20)
class1 = 40

我想获得所有可能的产品组合的 class 实例的总和。 这些可以重复(即 (2, 20) 可以多次使用,依此类推),因此组合的数量会非常大。

我的问题是,当我的实例数量增长到非常大的数量时,我不确定如何遍历整个组合列表。 到目前为止,我唯一能想到的就是如下,这只会导致空白。

pos_combos = []
for i in combos:
   x, y = i
   if class1.method(x, y)
      +class2.method(x, y)
      +class3.method(x, y)
   …
      +class98.method(x, y)
      +class99.method(x, y)
      +class100.method(x, y) > 0:
         pos_combos.append(i)
print(pos_cases)

我可以在下面得到我想要使用的不同组合。

combo2 = list(product(combo, repeat=100))

但这太长了,甚至无法打印,更不用说通过方程式传递 this 的每个元素的问题了。

有人对如何做到这一点有任何想法吗? 我认为对于简单的 for 循环/函数而言,这可能是一项太大的任务,并且可以使用一些更复杂的方法(即某种形式的 ML)。 也许我可以将这两个列表分开并以某种方式遍历每个列表?

如果有人能指出我正确的方向,将不胜感激

谢谢。


编辑:一个最小的可重现示例如下:如果每个第二个实例都是一个负积,考虑到元组可以重复,一个例子是如果使用 bet1 (2, 20) 和 bet2 - bet100 使用 (2, 5) (所以 99 次)那么 pos_combos 列表中的一个条目将是元组的元组

[((2, 20), ... (2, 5))]

因为它们的总和大于 0,因为它等于 40。我想获取所有其他符合此标准的列表。

如果您已经有了列表combo ,那么您应该能够执行以下操作:

import itertools

sum([i*j for i,j in list(itertools.combinations(combo, 2))])

如果combo = [1, 2, 3] ,则上面的代码执行以下操作:

(1 * 2) + (1 * 3) + (2 * 3)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM