【发布时间】:2015-06-21 19:01:58
【问题描述】:
我有一个可变大小的列表,例如
[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 编写了一个 hackish 解决方案。
-
@Leo 然后将其发布在您的问题中。并提出具体问题,关于您的解决方案有什么问题。
-
订单是否相关?
-
([a,b], []) = ([b, a], []) != ([], [a, b])
标签: java python algorithm list sublist