我有一个随机数生成器,我想从字典中返回 7 个键。
我正在使用 random.uniform 生成一个浮点值,该值与字典中的一组值相匹配,这些值是浮点值以生成最接近的值并将相关键返回到该值。
我正在迭代一个列表以添加生成的任何唯一键,但忽略任何重复的键,因为我想最终得到一组随机数字,例如5, 12, 6, 18, 28, 23, 15 不重复的值,例如 5, 12, 5, 15, 23, 12, 5
我生成一组数字的代码有效:
count = 0
while True:
if count <= 6:
number = ran.uniform(0.0, max_key)
num_gen = min(sorted_countout, key=lambda x:abs(x-(number)))
snumgen = list()
if num_gen not in snumgen:
snumgen.append(num_gen)
count += 1
else:
count += 0
print(snumgen)
elif count > 6:
break
但是它没有生成一组唯一的数字,我仍然在生成的集合中得到重复的值。
另外作为一个单独的问题 - 我如何在循环之外重置计数?它完成了循环,但随后锁定在 6 - 我必须关闭 vscode 才能让它生成一组新的数字 -
注意:在这种质疑中存在一些类似的问题 - 但我更具体地要求在这种情况下找到解决方案,因为它应该产生唯一的数字,但目前还没有。我是一名初级开发人员,感谢您的帮助,因为它帮助我学习!
##这是我的字典的一个例子:
sorted_countout = {1: 17.8343949044586, 2: 21.337579617834397, 3: 21.656050955414013, 4: 19.745222929936308, 5: 19.10828025477707, 6: 20.382165605095544, 7: 23.88535031847134, 8: 17.8343949044586, 9: 21.97452229299363, 10: 20.382165605095}
import random as ran
##this is the function
def choices():
##selecting the maximum value in the dict
max_key = next(iter(sorted_countout))
for key in sorted_countout:
if sorted_countout[key] > sorted_countout[max_key]:
max_key = key
##Randomly select a float value in range of 0- max freq of occurrence
count = 0
while True:
if count <= 6:
number = ran.uniform(0.0, max_key)
num_gen = min(sorted_countout, key=lambda x:abs(x-(number)))
snumgen = list()
if num_gen not in snumgen:
snumgen.append(num_gen)
count += 1
else:
count += 0
print(snumgen)
elif count > 6:
break
那是因为您在循环内实例化列表,因此每个周期都会重置它。另外,您需要在循环后立即将计数器设置回
0
:
def choices():
max_key = next(iter(sorted_countout))
for key in sorted_countout:
if sorted_countout[key] > sorted_countout[max_key]:
max_key = key
count = 0
snumgen = [] # Move the list initialization outside the loop
while True:
if count <= 6:
number = ran.uniform(0.0, max_key)
num_gen = min(sorted_countout, key=lambda x:abs(x-(number)))
if num_gen not in snumgen:
snumgen.append(num_gen)
count += 1
else:
continue # Skip duplicate numbers
else:
break
print(snumgen)
count = 0 # Reset count outside the loop