具有最小值和最大值的k部分的划分

2024-09-30 01:34:15 发布

您现在位置:Python中文网/ 问答频道 /正文

如何生成一个完全有k个部分的数的分区,其中每个部分都有最小值和最大值?在

例如,如果要选择21的所有分区,其中6个部分的最小部分值为3,而最大的部分值为6,则应获得以下分区:

[3, 3, 3, 3, 3, 6]     
[3, 3, 3, 3, 4, 5]
[3, 3, 3, 4, 4, 4]

我有以下升序分区代码,由http://jeromekelleher.net/generating-integer-partitions.html提供

^{pr2}$

我写了一个简单的函数,只从上面的函数中得到我想要的分区:

def eligible_partitions(list_of_partitions, min_value, max_value, k):
     l = []
     for x in list_of_partitions:
          if min(x) >= min_value and max(x) <= max_value and len(x) == k:
               l.append(x)
     return l

我只想生成满足指定条件的那些分区,而不必生成和循环特定值的所有分区。在


Tags: andof函数代码httpnetvaluemin
1条回答
网友
1楼 · 发布于 2024-09-30 01:34:15

以下是一种方法:

def part(x, n, minval, maxval):
  if not n * minval <= x <= n * maxval:
    return
  elif n == 0:
    yield []
  else:
    for val in range(minval, maxval + 1):
      for p in part(x - val, n - 1, val, maxval):
        yield [val] + p

for p in part(21, 6, 3, 6):
  print p

这会产生:

^{pr2}$

相关问题 更多 >

    热门问题