如何编写一个使用一对的函数并在Python中返回2的基数集?

时间:2018-03-09 20:48:53

标签: python

我需要帮助编写一些Python代码,输入是一个表示集合的列表A,其输出是A的子集列表,其基数为2.我想使用导入来执行此操作,我的教授想要我了解数字的来源。

例如:

if A = [a, b, c], then
listPairs(A) = [[a, b], [a, c], [b, c]].

2 个答案:

答案 0 :(得分:4)

试试itertools.combinations。以下内容返回2长度A的所有子序列。

import itertools
[set(x) for x in itertools.combinations(A, 2)]

示例:

# AB AC AD BC BD CD
[set(x) for x in itertools.combinations('ABCD', 2)]
# 012 013 023 123
[set(x) for x in itertools.combinations(range(4), 3)]

这是功能等同的语法:

list(map(set, itertools.combinations(A, 2)))

答案 1 :(得分:0)

您基本上是在最标准的combinations功能之后。如 已经指出,这可以使用itertools.combinations轻松完成,或者您可以使用递归自行实现:

def combos(l, n):
    if n == 1:
        return [[e] for e in l]
    cs = []
    for i, e in enumerate(l):
        for c in combos(l[i+1:], n-1):
            cs.append([e] + c)
    return cs

并且测试演示了它的功能:

>>> combos(['a', 'b', 'c'], 2)
[['a', 'b'], ['a', 'c'], ['b', 'c']]
相关问题