在 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 中,如何创建可变长度组合或排列?的主要内容,如果未能解决你的问题,请参考以下文章