gpt4 book ai didi

python - 列出 1-50 范围内的 50 个随机数,使得相邻数字彼此不在 15 以内

转载 作者:行者123 更新时间:2023-11-28 19:16:29 28 4
gpt4 key购买 nike

这是我目前所拥有的,但如果我超过前一个数字的正负 11,它就会中断。因此,如果前一个数字是 1,则下一个数字必须大于 16。此外,我试图只使用每个数字一次。

示例输出:

[3,45, 1, 16, 33, 3, 23.....]

到目前为止我的脚本是:

import random
new_array=[]
counter = 0

array=range(51)
array=array[1:51]

while len(new_array)<50:
y=random.choice(array)
if y not in new_array and counter!=0 and y not in (range(new_array[counter-1]-11,new_array[counter-1]+11)):
new_array.append(y)
counter+=1
elif counter == 0:
new_array.append(y)
counter+=1
else:
pass

最佳答案

下面的方法怎么样。从一个打乱的列表开始。对于每一对,如果距离小于 15,则旋转剩余的数字。

import random

def get_shuffled_list(length):
output = range(1, length+1)
i = 0
sanity = 0

while i < length and sanity == 0:
random.shuffle(output)
for i in range(1, length):
sanity = length - i + 1

while abs(output[i-1] - output[i]) <= 15 and sanity:
output.append(output[i])
del output[i]
sanity -= 1

if sanity == 0:
break

return output

print get_shuffled_list(50)

提供以下类型的输出:

[1, 38, 3, 33, 16, 43, 10, 41, 9, 35, 4, 50, 29, 8, 44, 28, 5, 32, 14, 40, 21, 47, 25, 48, 30, 12, 34, 18, 42, 15, 36, 13, 31, 2, 24, 7, 23, 39, 22, 6, 26, 49, 27, 11, 45, 19, 46, 17, 37, 20]

如果您没有剩余满足条件的数字,则问题会在最后出现,在这种情况下,请重新开始。对于 10,000 次洗牌测试,我遇到的最坏情况是 196 次尝试。不理想,但确实有效。

关于python - 列出 1-50 范围内的 50 个随机数,使得相邻数字彼此不在 15 以内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32935813/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com