我试图编写代码来解决标准的整数分区问题(维基百科).我写的代码很乱.我需要一个优雅的解决方案来解决问题,因为我想改进我的编码风格.这不是一个家庭作业问题.
我想在所有可能的组合中将列表拆分为n组(允许变量组长度).
说,我有以下列表:
lst=[1,2,3,4]
Run Code Online (Sandbox Code Playgroud)
如果我指定n = 2,则可以将列表分成1个元素-3元素或2个元素-2元素的组.在这两种分割列表的方式中,每个列表中都有各种元素的唯一组合.
当n = 2时,这些将是:
(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)
Run Code Online (Sandbox Code Playgroud)
当n = 1时,这些将是:
(1,2,3,4)
Run Code Online (Sandbox Code Playgroud)
n = 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)
Run Code Online (Sandbox Code Playgroud)
我对长度为0的组不感兴趣,并且组内的顺序无关紧要.
我发现了两个类似的问题,但他们并没有完全回答我的问题.
这个问题将列表分成所有组合,其中每个组的长度为n(我发现@tokland的答案)特别有用).但是,我并不是要寻找所有组长度相同的组.
然后,此问题的第一步获得拆分位置的独特组合,以将列表拆分为n个组.但是,此处保留了列表顺序,并且未确定这些组中元素的唯一组合.
我正在寻找这两个问题的组合 - 列表在组长度的所有可能组合中分成n组,以及组内元素的组合.