我有5个包含一些数据的列表:
a = [52, 265, 1, 98, 26]
b = [42, 85, 45, 2, 3, 8, 632]
c = [7, 731, 92, 65, 28, 62]
d = [3, 5, 44, 55]
e = [15, 35, 850, 6, 18, 41]
我想要做的是获得每种可能组合的值的总和,例如:
a[0] + b[0] + c[0] + d[0] + e[0] = **121**
...
a[4] + b[6] + c[5] + d[3] + e[5] = **816**
这需要以最快的方式完成,因为在我的代码中,这些列表的长度更大,因此所有可能性的计算都非常耗费时间。
我的第一个想法是使用嵌套for循环,但这还不够快。我想可以通过NumPy进行一些转换和一些魔术来加速这个过程。
答案 0 :(得分:1)
实际求和所有组合的最快方法(你实际上想要的是产品,而不是组合)是生成它们并加总它们
print([(x,sum(x)) for x in itertools.product(my_list1,my_list2,my_list3,...)])
但我怀疑秘密是不检查所有产品,而是智能地选择特定值来缩小搜索范围
答案 1 :(得分:0)
你想要这样的东西吗?
a = [52, 265, 1, 98, 26]
b = [42, 85, 45, 2, 3, 8, 632]
c = [7, 731, 92, 65, 28, 62]
d = [3, 5, 44, 55]
e = [15, 35, 850, 6, 18, 41]
import itertools
print(list(map(lambda x:sum(x),itertools.product(a,b,c,d,e))))
输出:
119, 139, 954, 110, 122, 145, 121, 141, 956, 112, 124, 147, 160, 180, 995, 151, 163, 186, 171, 191, 1006, 162, 174, 197, 843, 863, 1678, 834, 846, 869, 845, 865, 1680, 836, 848, 871, 884, 904, 1719, 875, 887, 910, 895, 915, 1730, 886, 898, 921, 204, 224, 1039, 195, 207, 230, 206, 226, 1041, 197, 209, 232, 245, 265, 1080, 236, 248, 271, 256, 276, 1091, 247, 259, 282, 177, 197, 1012, 168, 180, 203, 179, 199, 1014, 170, 182, 205, 218, 238, 1053, 209, 221, 244, 229, ....