把这个数分成随机数?

2024-10-01 13:34:25 发布

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

如果我需要将例7划分为随机数目的随机大小的元素,我该怎么做?在

所以有时我会得到[3,4],有时是[2,3,1],有时是[2,2,1,1,0,1]?在

我想这很简单,但我似乎得不到结果。在这里,我要做的代码明智(不起作用):

def split_big_num(num):
    partition = randint(1,int(4))
    piece = randint(1,int(num))
    result = []
    for i in range(partition):
        element = num-piece
        result.append(element)
        piece = randint(0,element)
#What's next?
        if num - piece == 0:
            return result
    return result

编辑:得到的每个数字都应该小于初始数字,零的数量不应该小于分区的数量。在


Tags: 代码目的元素数量piecereturn数字element
3条回答

你必须定义你所说的“随机”是什么意思。如果需要任意整数分区,可以生成所有整数分区,并使用random.choice。请参见python: Generating integer partitions这将不会得到带有0的结果。如果允许0,则必须允许可能无限个0的结果

或者,如果您只想随机取下一块,请执行以下操作:

def arbitraryPartitionLessThan(n):
    """Returns an arbitrary non-random partition where no number is >=n"""
    while n>0:
        x = random.randrange(1,n) if n!=1 else 1
        yield x
        n -= x

由于问题限制,每个数字都应该小于原始数字,这有点尴尬;如果允许原始数字,则会更加优雅。如果你想要0s,你可以做randrange(n),但是除非有隐藏的原因你没有分享,否则这是没有意义的。在

编辑针对问题编辑:由于您希望“零的数量不应小于分区的数量”,您可以任意在末尾添加0:

^{pr2}$

这个问题很武断,我强烈建议你选择这个作为你的答案:

def arbitraryPartition(n):
    """Returns an arbitrary non-random partition"""
    while n>0:
        x = random.randrange(1,n+1)
        yield x
        n -= x

我会选择下一个:

>>> def decomposition(i):
        while i > 0:
            n = random.randint(1, i)
            yield n
            i -= n

>>> list(decomposition(7))
[2, 4, 1]
>>> list(decomposition(7))
[2, 1, 3, 1]
>>> list(decomposition(7))
[3, 1, 3]
>>> list(decomposition(7))
[6, 1]
>>> list(decomposition(7))
[5, 1, 1]

然而,我不确定这个随机分布是否完全均匀。在

再次施救:

import random

def splitnum(num, lst=[]):
    if num == 0:
        return lst
    n = random.randint(0, num)
    return splitnum(num - n, lst + [n])

for i in range(10):
    print splitnum(7)

结果:

^{pr2}$

相关问题 更多 >