【发布时间】:2016-07-01 17:43:34
【问题描述】:
在 Python 中是否有一种有效的方法可以将大小为 n 的列表的所有分区分成两个大小为 n/2 的子集?我想得到一些迭代构造,这样每次迭代都提供原始列表的两个不重叠的子集,每个子集的大小为n/2。
例如:
A = [1,2,3,4,5,6] # here n = 6
# some iterative construct
# in each iteration, a pair of subsets of size n/2
# subsets = [[1,3,4], [2,5,6]] for example for one of the iterations
# subsets = [[1,2,5],[3,4,6]] a different iteration example
子集应该不重叠,例如[[1,2,3], [4,5,6]] 有效,但 [[1,2,3], [3,4,5]] 无效。两个子集的顺序无关紧要,例如[[1,2,3], [4,5,6]] 与 [[4,5,6], [1,2,3]] 没有区别,因此只有这两者中的一个应该出现在迭代中。每个子集中的顺序也无关紧要,所以[[1,2,3], [4,5,6]]、[[1,3,2], [4,5,6]]、[[3,2,1], [6,5,4]] 等都算作相同的,因此只有其中一个应该出现在整个迭代中。
【问题讨论】:
-
@idjaw 哦,我认为你说得更对。我可以取消我的重复警告吗?
-
@idjaw 实际上我的分数很低,我不能投票。那只是我升起的一面旗帜。
-
@idjaw:这不是关于如何分割成大小均匀的块的问题的重复;分块与任意子集是分开的。
-
两个大小为 n/2 的列表是否必须不重叠?还是
[[1,2,3], [1,2,3]]是一个有效的迭代?
标签: python list permutation combinatorics