假设我有以下代码,其中allModelsPredComb是3个元素的列表,其中每个元素是大小为2的元组,每个元组是数组。
from itertools import combinations
import numpy as np
list1 = np.random.randint(125, size=100)
list2 = np.random.randint(125, size=100)
list3 = np.random.randint(125, size=100)
allModelsPred = list([list1, list2, list3])
allModelsPredComb = list(combinations(allModelsPred, 2))
for c in range(len(allModelsPredComb)):
sum = np.sum(allModelsPred[c][0]) * np.sum( allModelsPredComb[c][1])
print(sum)
因此,结果得出所有组合的总和,即3。它打印类似的东西。 (请不要在意数字值不是问题)
807768
778360
70180
问题是用户不清楚每种组合对应什么。因此,我想添加列表的名称。
所以我希望我的结果看起来像
list1, list2
807768
list1, list3
778360
list2, list3
70180
我该如何实现?
PS:我不是Python专家。因此,我的问题可能更具普遍性。换句话说,不仅与itertools有关。
答案 0 :(得分:2)
这个问题确实与乔治在评论中提到的问题相似,尽管绝对不同。更具体地讲您的问题,这样的事情怎么样:
from itertools import product, combinations
import numpy as np
def named_product(**items):
values = list(items.values())[0]
names = list(combinations([value[0] for value in values], 2))
combs = list(combinations([value[1] for value in values], 2))
return list(product(zip(names, combs)))
list1 = tuple(("list1", np.random.randint(125, size=100)))
list2 = tuple(("list2", np.random.randint(125, size=100)))
list3 = tuple(("list3", np.random.randint(125, size=100)))
list_of_lists = [list1, list2, list3]
for output in named_product(lists=list_of_lists):
print("Using", output[0][0])
# change this if you want a different function with the arrays
print(np.sum(output[0][1][0]) * np.sum(output[0][1][1]))
示例输出:
Using ('list1', 'list2')
38061730
Using ('list1', 'list3')
40047770
Using ('list2', 'list3')
41575604
让我知道这是否不能回答您的问题。