我有可变大小的列表,例如拆分列表分为两个子列表中的所有可能的方式
[1, 2, 3, 4]
,我想每一个可能的方式向此列表分为两个:
([], [1, 2, 3, 4])
([1], [2, 3, 4])
([2], [1, 3, 4])
([3], [1, 2, 4])
([4], [1, 2, 3])
([1, 2], [3, 4])
([1, 3], [2, 4])
([1, 4], [2, 3])
([2, 3], [1, 4])
([2, 4], [1, 3])
([3, 4], [1, 2])
([1, 2, 3], [4])
([1, 2, 4], [3])
([1, 3, 4], [2])
([2, 3, 4], [1])
([1, 2, 3, 4], [])
我很确定这不是一个未知的问题,有可能是一个算法,但我找不到一个。此外,这不应该使用任何外部库,而是使用大多数语言中的简单语言功能(循环,条件,方法/函数,变量等)。
我用Python编写的一个hackish的解决方案:
def get_all(objects):
for i in range(1, len(objects)):
for a in combinations(objects, i):
for b in combinations([obj for obj in objects if obj not in up], len(objects) - i):
yield State(up, down)
if objects:
yield State([], objects)
yield State(objects, [])
但是,它使用的库功能,但非常好看一般。
我们这里不写代码。我们帮助人们获得解决方案。你需要向我们展示一些努力。 –
我在Python中编写了一个黑客解决方案。 – LeoTietz
你应该发布它。 – Brionius