簡體   English   中英

在Python中對多個列表的每個組合求和的最快方法

[英]Fastest way to sum values every combination of multiple lists in Python

我有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進行一些轉換和魔術,以加快此過程。

實際求和所有組合(您真正想要的是產品,而不是組合)的最快方法是生成並求和

print([(x,sum(x)) for x in itertools.product(my_list1,my_list2,my_list3,...)])

但我懷疑,這個秘密是檢查所有的產品,而是智能地選擇特定值來縮小搜索空間

您想要這樣的東西嗎?

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, ....

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM