我想获取值列表的所有组合。我能够通过以下代码做到这一点:
list_of_all_features_to_combine = [name1, name2, name3]
import itertools
all_combinations = []
for L in range(0, len(list_of_all_features_to_combine)+1):
for subset in itertools.combinations(list_of_all_features_to_combine, L):
all_combinations.append(subset)
我打印出一种组合,如下所示:
print(all_combinations[0])
当然,我只会得到这些值。
我的问题是我想知道“哪些”项目被合并,因此我需要变量名。我可以想象,做到这一点的唯一方法是拥有一个以字符串为名称的字典列表,然后将它们组合在一起,但是我敢肯定,这样做有一种更简单,更优雅的方法。也许一些如何检索变量名的方法,这样我得到的输出像name1, name2 : (1,2)
也许这就是您要寻找的:
from itertools import combinations
name1, name2, name3 = 10,20,30
names = ["name1", "name2", "name3"]
list_of_all_features_to_combine = [name1, name2, name3]
my_globals = globals()
name_combs = [subset for L in range(len(names)+1)
for subset in combinations(names,L)]
result = {t:tuple(my_globals[var] for var in t) for t in name_combs }
结果看起来像这样:
print (result)
{(): (),
('name1',): (10,),
('name2',): (20,),
('name3',): (30,),
('name1', 'name2'): (10, 20),
('name1', 'name3'): (10, 30),
('name2', 'name3'): (20, 30),
('name1', 'name2', 'name3'): (10, 20, 30)}
要仅访问值的组合,请执行以下操作:
print (list(result.values()))
[(), (10,), (20,), (30,), (10, 20), (10, 30), (20, 30), (10, 20, 30)]
要仅访问名称组合:
print (list(result.keys()))
[(), ('name1',), ('name2',), ('name3',), ('name1', 'name2'), ('name1', 'name3'), ('name2', 'name3'), ('name1', 'name2', 'name3')]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句