2017-09-28 4 views
2

J'ai deux listes, essentiellement le même nombre:python comment dessiner une variable à nouveau si elle est la même que celle d'une autre variable

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 

Comment puis-je demander python de tirer à nouveau si drawB == drawA. Ou alors, comment puis-je tirer un numéro de la liste B en excluant le numéro déjà dessiné dans la liste A?

+0

Va toujours 'A' et' B' être le même? –

+0

Pourquoi ne pas utiliser 'random.shuffle' suivi de' list.pop'? Ou, 'drawA, drawB = random.sample (A, 2)'. –

+0

[** 'random.sample' **] (https://docs.python.org/2/library/random.html#random.sample). –

Répondre

1

Excluez simplement la valeur de drawA de B tout en trouvant le nombre aléatoire.

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

OU

en boucle jusqu'à ce que vous gardez obtenir le résultat souhaité.

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 
+0

Quelles sont les autres options offertes par le module [** 'random' **] (https://docs.python.org/2/library/random.html)? –

+0

@PeterWood J'obtiens un échantillonnage qui pourrait fonctionner, mais que se passerait-il si deux listes étaient différentes? – hspandher

+0

merci beaucoup – Ryan

1

Recherche dans un tableau modifié ne contenant pas d'élément 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])) 
+0

merci beaucoup – Ryan

1

Au début, nous pouvons créer un générateur de nombres aléatoires B:

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

Et puis sélectionnez le premier qui ne soit pas la valeur utilisée pour A:

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

Alternativement, vous pouvez utiliser:

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

merci beaucoup – Ryan