我试图编写一个从python
列表中创建nCk的函数例如来自对列表:
['a', 'b', 'c']
输出应该是:
[['a','b'],['a','c'],['b','c']]
但是我没有输出
这是我的尝试:
def chose(elements, k):
output = []
for i in range(len(elements)):
if k == 1:
output.append(elements[i])
for c in chose(elements[i+1:], k-1):
output.append(elements[i])
output.append(c)
return output
print chose(['a', 'b', 'c'],2)
你能告诉我们功能
有什么问题吗?答案 0 :(得分:1)
如果要查找所有组合,请使用itertools.combinations
:
from itertools import combinations
a = ['a', 'b', 'c']
result = [list(i) for i in combinations(a,2)]
可以在here ...
上找到combinations()
函数的文档和实现
<强>更新强> 这个功能可以做你想要的:
def chose(elements, k):
output = []
if k == 1:
return [[i] for i in elements]
else:
for i in range(len(elements)):
head = elements[i]
tails = chose(elements[i+1:], k-1)
output += [[head] + tail for tail in tails]
return output
print chose(['a','b','c'], 2)
答案 1 :(得分:1)
您可以在不使用任何导入的情况下使用powerset:
def power_set(items,k):
n = len(items)
for i in xrange(2**n):
combo = []
for j in xrange(n):
if (i >> j) % 2 == 1:
combo.append(items[j])
if len(combo) == k:
yield combo
print(list(power_set(['a', 'b', 'c'],2)))
[['a', 'b'], ['a', 'c'], ['b', 'c']]