【发布时间】:2014-11-26 20:11:21
【问题描述】:
我正在寻找一种遍历所有可能性的方法,将一个数组列表拆分为两个数组列表,其中第一个有 k 个元素,第二个有其余元素。
例如,我会在 Python 中编写
import itertools
my_set = {1,2,3,4,5}
k = 2
map(lambda x: (set(x), my_set-set(x)), itertools.combinations(my_set, k))
这会给:
[(set([1, 2]), set([3, 4, 5])),
(set([1, 3]), set([2, 4, 5])),
(set([1, 4]), set([2, 3, 5])),
(set([1, 5]), set([2, 3, 4])),
(set([2, 3]), set([1, 4, 5])),
(set([2, 4]), set([1, 3, 5])),
(set([2, 5]), set([1, 3, 4])),
(set([3, 4]), set([1, 2, 5])),
(set([3, 5]), set([1, 2, 4])),
(set([4, 5]), set([1, 2, 3]))]
如何在 Java 中获取给定集合(嗯,ArrayList)的所有 k 元素子集?
【问题讨论】:
-
Java 中也有集合,你知道的。
-
Guava 有
Collections2.permutations(Collection),分割成部分的结果可能是你想要的。 -
itertools.combinations 的文档在 python 中提供了一个实现,您可能可以在 java 中翻译它