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

Posted

技术标签:

【中文标题】在 Python 中,如何创建可变长度组合或排列?【英文标题】:In Python how do I create variable length combinations or permutations? 【发布时间】:2013-07-15 05:31:58 【问题描述】:

假设我有一个名为 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]] 的列表列表中的每个列表中获取至少一个参数。非常感谢您的一句台词和理解。

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

【问题讨论】:

【参考方案1】:

怎么样:

(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 用于列表理解。你介意告诉我这是如何工作的吗?这不是嵌套循环吧?【参考方案2】:

From : 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]

【讨论】:

以上是关于在 Python 中,如何创建可变长度组合或排列?的主要内容,如果未能解决你的问题,请参考以下文章

从 n 个元素生成长度为 r 的组合而不重复或排列的函数的时间复杂度是多少?

在python中使用递归来组合可变大小的列表

含有重复字符的字符串排列组合

如何从所有排列中生成所有可能的组合?

【基础】Python3小程序_之排列组合

将 Python 字典排列组合到字典列表中