我使用下面的代码部分
num_item = 3
for i in range(1,num_item+1):
list(itertools.combinations(range(0,num_item), i))
生成组合列表
^{pr2}$我想将这些组合作为两个值的键:kvalue和kweight,如下例所示
key 1 : (0,) , value 1 : kvalue = 8 kweight = 4
key 2 : (1,) , value 2 : kvalue = 10 kweight = 5
key 3 : (2,) , value 3 : kvalue = 15 kweight = 8
有没有好的数据结构来存储上面的数据?
如何将(0,)转换为(字符串的)键?
以后我还需要按kweight对列表进行排序,是否可以使用一个可以调用python排序函数的数据结构?
编辑:我想我应该扩展上面的例子。我想将(0,1,2)存储为键7,这个键有两个值:kvalue=-1,kweight=9
key 1 : (0,) , value 1 : kvalue = 8 kweight = 4
key 2 : (1,) , value 2 : kvalue = 10 kweight = 5
key 3 : (2,) , value 3 : kvalue = 15 kweight = 8
key 4 : (0, 1) , value 4 : kvalue = 18 kweight = 9
key 5 : (0, 2) , value 5 : kvalue = -1 kweight = 4
key 6 : (1, 2) , value 6 : kvalue = -1 kweight = 5
key 7 : (0, 1, 2) , value 7 : kvalue = -1 kweight = 9
^{}
你其实不需要。由于
(0,)
是一个元组,并且元组是可散列的,所以它可以直接用作键。在可以使用嵌套dict或创建value对象。在
或者
^{pr2}$你基本上生成了2^n-1个数字,其中n是num_项。。 所以你可以使用位操作来得到上面的结果。在
将i从0迭代到2^n-1:
查找i的二进制:
检查每个设定位,位的位置(从1开始)将给出您想要的组合。在
相关问题 更多 >
编程相关推荐