Python 3.x 如何生成随机值列表(不包括其他列表中的值)

Python 3.x 如何生成随机值列表(不包括其他列表中的值),python-3.x,Python 3.x,我正在使用Python 3.6.3 我的代码生成五个值的随机列表(类型integer) 将此随机列表中的值与另一个列表进行比较,该列表包含要从生成的列表中排除的值。这意味着,如果在排除的数字列表中提到了一个随机数,则必须处理重画以获得一个新值 下面是一个简化的源代码:(您可以复制/粘贴,此代码正在运行) 但问题仍然存在 当重新绘制occcurs时,必须根据排除的值列表、和控制列表检查新的绘制编号,以便获得完全干净且无重复的最终控制列表 在我的代码中尝试了许多方法之后,我没有找到如何安排这个双重过

我正在使用Python 3.6.3

我的代码生成五个值的随机列表(类型integer)

将此随机列表中的值与另一个列表进行比较,该列表包含要从生成的列表中排除的值。这意味着,如果在排除的数字列表中提到了一个随机数,则必须处理重画以获得一个新值

下面是一个简化的源代码:(您可以复制/粘贴,此代码正在运行)

但问题仍然存在

当重新绘制occcurs时,必须根据排除的值列表、控制列表检查新的绘制编号,以便获得完全干净且无重复的最终控制列表

在我的代码中尝试了许多方法之后,我没有找到如何安排这个双重过程;我可能错过了一个论点或方法,我不知道如何管理这个“循环”过程

下面是运行上述代码的示例:

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]

从一组没有排除的数字中提取数字不是更简单吗?Chavoua Tov!:)不太可能,因为在我的代码中,排除的_值列表由于商品原因是固定的(我不必在控制台中手动输入列表)。每次运行时,可通过输入更改排除的值。最终的程序旨在生成数百个列表,然后通过xslxwriter模块写入Excel文件,以便进一步处理(已开发)。尽管如此,您已经拥有了所有的列表和excl列表,它们都可以是动态的,并且可以根据输入进行更改。您可以仅从集合(所有)集合(不包括)中绘制。没有?对不起,我不明白你的问题(我还不是Python专家)。随机函数是必需的。关于我上面的代码,有一个好的简单的解决方案吗?更清楚地说,排除的值是运行开始时的一个输入,绘图列表是通过随机函数生成的。非常感谢@Lior Cohen,它运行得非常完美。我离这个解决方案很远。我将很快适应我的主要代码,遵循您宝贵的建议!再次感谢!我不想含糊其辞,你是哪里人?:)对不起,我只是按了一下。对你来说可以吗?请注意Lior Cohen,我确认我在我的主代码中插入了你的解决方案,并且它工作得既快又完美。再次感谢!这个问题现在可以结束了。是自动的吗?欢迎听。不需要关门。
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]