为了账号安全,请及时绑定邮箱和手机立即绑定

如何使列表中的随机值至少在Python列表中的每个值的给定数量上是唯一的?

如何使列表中的随机值至少在Python列表中的每个值的给定数量上是唯一的?

红颜莎娜 2022-10-06 18:36:39
所以我对python相当陌生。我正在尝试创建一个具有唯一随机值的列表,这些随机值与列表中的每个其他随机值至少相差一个给定因子,并且都以两个值为界。例如,我想要一个类似的列表:randVals = [24, 418, 100, 286, 350]其中每个值彼此之间的唯一性至少为给定因子 64。现在,我的代码:import randomx = [1, 2, 3, 4, 5]randVals = [0] * (len(x) + 1)factor = 64print(randVals)for i in range(len(randVals) - 1):    randVals[i] = random.randint(10, 502)    while randVals[i + 1] - factor <= randVals[i] <= randVals[i + 1] + factor:        randVals[i] = random.randint(10, 502)    print(randVals)randVals.pop(len(x))    print(randVals)输出:[0, 0, 0, 0, 0, 0][494, 0, 0, 0, 0, 0][494, 144, 0, 0, 0, 0][494, 144, 489, 0, 0, 0][494, 144, 489, 342, 0, 0][494, 144, 489, 342, 361, 0][494, 144, 489, 342, 361]
查看完整描述

2 回答

?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

首先,让我们确保我理解您要执行的操作:“我正在尝试创建一个具有唯一随机值的列表,这些随机值至少成对地相差一个给定的因子,并且都以两个值为界。” “我试图让所有值都在 10 到 502 之间,而列表中的所有值至少相隔 64 个单位或更多。”


然后,按照您的使用方法random.randint:


import random    # to generate random values


randVals = []    # and keep those values in a list

factor = 64      # values should differ by this factor

low = 10         # lower bound

high = 502       # upper bound


x = low     # start at lower bound


length = 8  # list should be of this length


if(high - factor*length)<low:

    print('Impossible to generate list with given parameters')

else:

    for i in range(length):


        # generate a random integer, leaving space

        # for enough others given the various requirements...

        randVal = random.randint(x, high-factor*(length-i))


        # add to list

        randVals.append(randVal)

        x = randVal + factor



    print(randVals)    


    # if we want, we can shuffle the list

    random.shuffle(randVals)

    print(randVals)


查看完整回答
反对 回复 2022-10-06
?
哔哔one

TA贡献1854条经验 获得超8个赞

您可以执行以下操作:


from random import sample



def random_list(spacing, k=5, lo=10, hi=502):

    return sample(list(range(lo, hi+1, spacing)), k=k)



result = random_list(64, k=5)


print(result)

输出 (随机)


[10, 458, 394, 266, 330]

随着list(range(lo, hi+1, spacing))您生成 10 到 502 之间的所有数字,步长为 64,然后使用sample从该总体中随机选择k数字。


查看完整回答
反对 回复 2022-10-06
  • 2 回答
  • 0 关注
  • 110 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信