我正在使用Python 3.6.3。
我的代码生成五个值(整数类型)的随机列表。
将此随机列表中的值与另一个列表进行比较,该列表包含要从生成的列表中排除的值。这意味着,如果在exclude_numbers列表中提到了随机数,则必须处理重绘以获得新值。
下面是一个简化的源代码:(您可以复制/粘贴,此代码正在运行)
import numpy as np
import random
excluded_values = [1,2,3,4,5,6,15,18,30] # values to exclude from the random list
print ("draw_numbers to exclude ",excluded_values,"\n")
loops = 1
for ln in range (0,loops):
# Random list
z=[]
z=random.sample(range(1,30), 5) # no duplicates
z.sort()
print ("Draw numbers original list z ", z,"\n")
# Standard deviation draw_numbers
deviation = np.std(z)
deviation=float(deviation)
deviation= round (deviation,5)
print ("draw_numbers loop number ",ln," ", z, " standard deviation ", deviation,"\n")
control_list = []
for i in range (0,5):
draw_number = z[i]
draw_number = str(draw_number)
print ("Draw number z[",i,"] ",draw_number)
print ("Original random list z ",z)
if int(draw_number) in excluded_values:
print ("Present in excluded_values")
# trigger if draw_number must be excluded
draw_number= random.randint(1,50)
print ("------>>> REDRAW draw_number ", draw_number)
draw_number = int (draw_number)
control_list.append(draw_number)
print ("Control list ", control_list," Original list z ",z,"\n")
else:
draw_number = int (draw_number)
control_list.append(draw_number)
print ("Control list ", control_list," z ",z,"\n")
continue
z = control_list
continue
但是问题仍然存在。
当发生重画时,必须对照exclude_values列表AND control_list来检查新的画号,以使最终的control_list完全干净而不重复。
在我的代码中尝试了多种方式后,我没有找到如何安排这种双重过程的方法。我可能错过了一个论点或方法,而且我不知道如何管理这个“循环”过程。
下面是运行上述代码的示例:
draw_numbers to exclude [1, 2, 3, 4, 5, 6, 15, 18, 30]
Draw numbers original list z [4, 6, 9, 12, 18]
draw_numbers loop number 0 [4, 6, 9, 12, 18] standard deviation 4.91528
Draw number z[ 0 ] 4
Original random list z [4, 6, 9, 12, 18]
Present in excluded_values
------>>> REDRAW draw_number 45
Control list [45] Original list z [4, 6, 9, 12, 18]
Draw number z[ 1 ] 6
Original random list z [4, 6, 9, 12, 18]
Present in excluded_values
------>>> REDRAW draw_number 40
Control list [45, 40] Original list z [4, 6, 9, 12, 18]
Draw number z[ 2 ] 9
Original random list z [4, 6, 9, 12, 18]
Control list [45, 40, 9] z [4, 6, 9, 12, 18]
Draw number z[ 3 ] 12
Original random list z [4, 6, 9, 12, 18]
Control list [45, 40, 9, 12] z [4, 6, 9, 12, 18]
Draw number z[ 4 ] 18
Original random list z [4, 6, 9, 12, 18]
Present in excluded_values
------>>> REDRAW draw_number 14
Control list [45, 40, 9, 12, 14] Original list z [4, 6, 9, 12, 18]
感谢您的帮助和宝贵时间。
无论如何,要保重并在@家中保持安全。
来自法国巴黎的问候:)
在评论之后,这是一个更简单的解决方案
from random import sample
k = 5
all_values = range(30)
excluded_values = [1,2,3,4,5,6,15,18,30]
k_sampled = sample(set(all_values) - set(excluded_values), k)
print(k_sampled) # --> [28, 10, 8, 11, 20]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句