假设我有一个名为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.combinbinations或排列,因为我需要知道参数大小,我似乎无法使用itertools.products,因为这将从列表列表中的每一个看起来像这样[[1],[2],[3],[4],[5]]
至少一个参数。特别感谢一个衬里和理解。
如果我想将它们全部加在一起那么在帮助方面要求太多了吗? ; - )
答案 0 :(得分:11)
怎么样:
(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
答案 1 :(得分: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]