8

假设我有一个名为 arr = [1,2,3,4] 的数组

我怎样才能生成所有可能的组合,至少有 2 个参数最终看起来像

[1,2]
[1,3]
[1,4]
[1,2,3]
[1,2,4]
[1,2,3, 4]
[2,3]
[2,4]

等等等等?我没有尝试任何工作。我似乎无法使用 itertools.combinations 或 permutations,因为我需要知道参数大小,而且我似乎无法使用 itertools.products,因为这将从看起来像这样的列表列表中的每个列表中获取至少一个参数[[1],[2],[3],[4],[5]]。额外感谢一个班轮和理解。

如果我想将它们全部加在一起,在帮助方面要求太多了吗?;-)

4

2 回答 2

19

怎么样:

(x for l in range(2, len(arr)) for x in itertools.combinations(arr, l))

或者

[x for l in range(2, len(arr)) for x in itertools.combinations(arr, l)]

如果你需要这份清单。

这等效于以下嵌套循环

res = []
for l in range(2, len(arr)):
    for x in itertools.combinations(arr, l):
        res.append(x)
return res
于 2013-07-16T20:50:53.567 回答
0

来自:http ://wiki.python.org/moin/Powerful%20Python%20One-Liners使用以下创建所有子集,然后细化长度小于 2 的子集

f = lambda x: [[y for j, y in enumerate(set(x)) if (i >> j) & 1] for i in range(2**len(set(x)))]

print [k for k in f([1,2,3,4]) if len(k) >1]
于 2013-07-16T20:52:30.140 回答