2014-04-08 27 views
4
l = [True, True , False] 

不使用itertools模塊。在不使用ITERTOOLS的情況下在布爾列表的python中創建組合/排列

如何喲在新list

newlist = [[True,True,False],[True,True,True], [False,False,True],[False,False,False]....] 

創建升排列基本上這就是我嘗試做的事:

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

http://stackoverflow.com/questions/104420/如何生成所有python列表中的列表 – seb

+0

[True,True,True],[False,False,True]和[False,False,False]不是[真,真,假] – miles82

+0

哦對。那不是所謂的排列。你叫什麼不同的組合? – user3349106

回答

1

使用itertools.permutations

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

編輯:從你的問題,你需要的一個排列組合是(True, True, True)這不是列表l的所有列表的排列組合。這個答案在技術意義上給了你一個列表的排列,你可能不得不做額外的工作來實現你在問題中顯示的內容(當然,除非是錯字)。

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)] 

OR試試這個,

>>> 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]] 
>>> 
1

使用itertools.permutations的等價純Python從官方docs

2

我能想到的最簡單的方法,將三次迭代的項目相同的列表,並只收集了獨特的項目,像這樣

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