在不使用ITERTOOLS的情况下在布尔列表的python中创建组合/排列

时间:2014-04-08 06:12:45

标签: python permutation

l = [True, True , False]

不使用itertools模块。

如何在新的list

中创建l的排列
newlist = [[True,True,False],[True,True,True], [False,False,True],[False,False,False]....]

基本上这就是我想要做的事情:

allorderings = itertools.product ([False, True], repeat = n)

4 个答案:

答案 0 :(得分:3)

使用itertools.permutations

import itertools
l = [True, True , False]
newlist = list(itertools.permutations(l))

编辑:根据您的问题,您需要的其中一个排列是(True, True, True),这不是列表l的所有排列。这个答案为您提供了技术意义上的列表排列,您可能需要做额外的工作才能实现您在问题中显示的内容(除非当然是错字)。

答案 1 :(得分:2)

我能想到的最简单的方法是迭代同一个项目列表三次并只收集唯一的项目,比如

l = set([True, True, False])
print {(i, j, k) for i in l for j in l for k in l}

答案 2 :(得分:1)

使用来自官方docs的纯python中的itertools.permutations等效内容?

答案 3 :(得分:0)

试试这个,

>>> import itertools
>>> print list(itertools.permutations([True, True , False], 3))

输出

[(True, True, False), (True, False, True), (True, True, False), (True, False, True), (False, True, True), (False, True, True)]

试试这个,

>>> def combiList(l):
        if not l:
            return [[]]
        res = []
        for e in l:
            temp = l[:]
            temp.remove(e)
            res.extend([[e] + r for r in combiList(temp)])

        return res


>>> combiList([True, True , False])
[[True, True, False], [True, False, True], [True, True, False], [True, False, True], [False, True, True], [False, True, True]]
>>>