n的函数从python中的n列表中选择k个元素

时间:2014-05-25 08:55:11

标签: python recursion combinatorics

我试图编写一个从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)

你能告诉我们功能

有什么问题吗?

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']]