在Python中,如何创建可变长度组合或排列?

时间:2013-07-16 20:46:33

标签: python python-3.x combinations list-comprehension

假设我有一个名为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]]至少一个参数。特别感谢一个衬里和理解。

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

2 个答案:

答案 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]