如果它与另一个变量相同,如何再次绘制变量

时间:2017-09-28 09:46:45

标签: python random while-loop draw

我有两个列表,基本上是相同的数字:

import random

A = [ 0, 10, 20, 30, 40 ] 
B = [ 0, 10, 20, 30, 40 ]
drawA =(random.choice(A))
drawB =(random.choice(B)) # want to exclude the number drawn in drawA

如果drawB == drawA,我怎么能让python再次绘制。

否则,我如何从列表B中绘制一个数字,不包括已在列表A中绘制的数字?

3 个答案:

答案 0 :(得分:1)

在查找随机数时,只需从B中排除drawA的值。

drawB = random.choice(filter(lambda num: num != drawA, B))

OR

保持循环,直到获得所需的结果。

import random

A = [ 0, 10, 20, 30, 40 ] 
B = [ 0, 10, 20, 30, 40 ]

drawA = random.choice(A)
number = random.choice(B)
while number == drawA:
    number = random.choice(B)

drawB = number

答案 1 :(得分:1)

在没有drawA元素的修改过的数组中搜索。

import random

A = [ 0, 10, 20, 30, 40 ] 
B = [ 0, 10, 20, 30, 40 ]
drawA =(random.choice(A))
drawB =(random.choice([x for x in B if x != drawA]))

答案 2 :(得分:1)

首先,我们可以为B创建一个随机数生成器:

def gen_B():
    while True:
         yield random.choice(B)

然后选择第一个不是用于A:

的值
drawB = next(x for x in gen_B() if x != drawA)

或者,您可以使用:

import itertools
next(x for x in (random.choice(B) for _ in itertools.count()) if x != drawA)