开发者社区> 问答> 正文

如何以所有可能的方式将列表划分为大小为k的子字符串

考虑我们有:

size of array = 5
pairs= 3
array= 1 2 3 4 5

我们需要将其划分为以下可能的子列表:

[(1,2,3),(4),(5)]

[(1),(2,3,4),(5)]

[(1),(2),(3,4,5)]

[(1,2),(3,4),(5)]

[(1),(2,3),(4,5)]

假设是否:

size of array = 5
pairs= 2
array= 1 2 3 4 5

我们需要将其划分为以下可能的子列表:

[(1,2,3,4),(5)]

[(1),(2,3,4,5)]

[(1,2),(3,4,5)]

[(1,2,3),(4,5)]

我尝试过的代码:

l1=[1,2,3,4,5]
from itertools import permutations
l2 = permutations(l1)
l3 = [[sum([x[0], x[1]]), sum([x[2], x[3]]),x[4]] for x in l2]
max_arr=[]
for arr in l3:
  max_arr.append(max(arr))
print(min(max_arr))

问题来源:stackoverflow

展开
收起
is大龙 2020-03-23 21:40:10 359 0
1 条回答
写回答
取消 提交回答
  • 要生成所有列表分区,您可以列出parts-1一和size-parts零。(注意,我使用parts而不是pairs作为更合适的名称)。

    然后生成该列表的排列(例如,使用itertools),并且对于每个排列,在索引为1之后分离初始列表。(请注意,此类排列有Cnk(size-1,parts-1))。

    例如,结果[0,1,1,0]对应于分区[[1,2 ,,(3),(4,5)](在第一项和第二项之后的划分列表)

    这是“星条”原则的应用

    回答来源:stackoverflow

    2020-03-23 21:40:17
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载