我需要帮助编写一些Python代码,输入是一个表示集合的列表A,其输出是A的子集列表,其基数为2.我想使用导入来执行此操作,我的教授想要我了解数字的来源。
例如:
if A = [a, b, c], then
listPairs(A) = [[a, b], [a, c], [b, c]].
答案 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']]