在不改变顺序的情况下拆分k个子集中的列表

所以我有一个列表说li=[1,4,2,5,2]
,这个列表将被分成
我想要这样输出的k=3子集

[
  [1,4,2],[5],[2]],
  [1,4],[2,5],[2],
  [1,4],[2],[5,2],
  [1],[4,2],[5,2],
  [1],[4],[2,5,2],
]

回答

使用递归:

li = [1,4,2,5,2]
def subsets(d, k, c = []):
   if len(c) == k and len(li) == sum(map(len, c)):
      yield c
   elif d:
      if len(c) < k:
         yield from subsets(d[1:], k, c+[[d[0]]])
      if c:
         yield from subsets(d[1:], k, [*c[:-1], c[-1]+[d[0]]])

print(list(subsets(li, 3)))

输出:

[[[1], [4], [2, 5, 2]],
 [[1], [4, 2], [5, 2]], 
 [[1], [4, 2, 5], [2]], 
 [[1, 4], [2], [5, 2]], 
 [[1, 4], [2, 5], [2]], 
 [[1, 4, 2], [5], [2]]]


以上是在不改变顺序的情况下拆分k个子集中的列表的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>