我有一个包含一些元素的列表,并且想要遍历所有可能的方法将此列表分成两个列表。我的意思是所有组合,所以顺序无关紧要(即元素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