【问题标题】:In Python how do I create variable length combinations or permutations?在 Python 中,如何创建可变长度组合或排列?
【发布时间】: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]] 的列表列表中的每个列表中获取至少一个参数。非常感谢您的一句台词和理解。

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

【问题讨论】:

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


    【解决方案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]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-28
      • 2019-12-07
      • 2011-12-20
      • 1970-01-01
      • 2021-12-15
      • 1970-01-01
      相关资源
      最近更新 更多