如何使用python itertools组合打印变量名称

时间:2019-08-01 18:07:54

标签: python combinations itertools

假设我有以下代码,其中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有关。

1 个答案:

答案 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

让我知道这是否不能回答您的问题。