【发布时间】:2019-11-18 06:18:45
【问题描述】:
我有一个包含少量元素的列表,我想找到将这个列表分成两个列表的所有可能性。
我的意思是,所有组合都意味着我不会关心它的元素顺序。 即如果元素 2 和 3 在一个列表中,则元素 1 在另一个列表中。 ([2,3],[1]) == ([1],[2,3])
这是我尝试过的:
import itertools
input_list = [10, 5, 15, 20, 25]
subset1, subset2, subsets = [], [], []
#sort input list
stuff = list(input_list)
stuff.sort()
#Find all possible [0] positions of given list
for L in range(0, len(stuff)+1):
for subset in itertools.permutations(stuff, L):
temp1 = list(subset)
temp1.sort()
if temp1 not in subset1:
subset1.append(list(temp1))
#find all possible [1] positions
for L2 in range(len(subset1)):
temp2 = list( set(stuff) - set(subset1[L2]))
temp2.sort()
subset2.append(temp2)
#combine two position lists and filter out same combination
for L3 in range(len(subset1)):
temp3 = [subset1[L3],subset2[L3]]
temp3.sort()
#filter out same combination result but different order
if temp3 not in subsets:
subsets.append(temp3)
当我运行这段代码时,我发现我的 subsets 列表的一些元素包含意外的元组数据, 比如 [[5, 25], [10, 15, 20], ([5, 15, 25], [10, 20])]。
我完全搞不懂这些元组类型数据的来源。 有人能指出我错过了什么吗?
谢谢
【问题讨论】:
标签: python python-3.x list