我有一個包含一些元素的列表,並且想要遍歷所有可能的方法將此列表分成兩個列表。我的意思是所有組合,所以順序無關緊要(即元素1和3可以在一個列表中,元素2在另一個列表中)。目前,我不喜歡這樣,當facs
是我的初步名單:將列表拆分爲兩個列表的所有可能性
patterns = []
for i in range(2**(len(facs)-1)):
pattern = []
for j in range((len(facs)-1)):
pattern.append(i//(2**j)%2)
patterns.append(pattern)
for pattern in patterns:
l1 = [facs[-1]]
l2 = []
for i in range(len(pattern)):
if pattern[i] == 1:
l1.append(facs[i])
else:
l2.append(facs[i])
所以我基本上創建長度爲2^(len(facs)-1)
的列表,並與一和零的每一個可能的組合填充它。然後我用facs
'覆蓋'每個模式,除了facs
的最後一個元素總是在l1
,因爲否則我得到每個結果兩次,因爲我處理兩個相同的列表,無論列表是l1
還是l2
。
有沒有更快,更優雅(更短/更pythonic)的方式來做到這一點?
看到這個答案? [在這裏輸入鏈接描述](http://stackoverflow.com/questions/752308/split-list-into-smaller-lists) –
你是什麼意思的所有可能的方式?排列,組合或拆分列表維護元素的順序? –
@IssamElyazidi是的,我看到了那個線程。不回答我的問題壽。 – PattuX