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

2024-09-19 23:40:36 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: import元素sizenprandom元组sumitertools
1条回答
网友
1楼 · 发布于 2024-09-19 23:40:36

这个问题确实与乔治在评论中提到的问题有相似之处,但肯定不同。把你的问题说得更具体一点,这样怎么样:

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

如果这不能回答你的问题,请告诉我

相关问题 更多 >