我想将我的dict值改为dict,而不是像现在这样改变元组。我有函数在k-places上返回组合n的i
个元素。
from itertools import combinations
def comb(n,k,i):
if i <= 0 or i > n:
return None
d = dict((enumerate(combinations(range(1,n+1),k))))
return d[i-1]
print(comb(5,3,1))
OUTPUT = (1, 2, 3)
EXPECTED = {1,2,3}
答案 0 :(得分:4)
您的预期输出是集,而不是字典;只需在结果上使用set()
:
return set(d[i-1])
演示:
>>> from itertools import combinations
>>> def comb(n,k,i):
... if i <= 0 or i > n:
... return None
... d = dict((enumerate(combinations(range(1,n+1),k))))
... return set(d[i-1])
...
>>> print(comb(5,3,1))
{1, 2, 3}
要获得可迭代对象的特定迭代,您可以使用itertools.islice()
call,而不是生成包含所有结果的字典:
from itertools import combinations, islice
def comb(n, k, i):
if not (0 > i >= n):
return None
d = combinations(range(1, n + 1), k)
ith_item = next(islice(d, i - 1, None))
return set(ith_item)
但是有可能更有效的方法来计算k中的n个特定组合而非强制执行。