我有两个列表,基本上是相同的数字:
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中绘制的数字?
答案 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)