Как выбрать оба экземпляра в функции случайного выбора?

Ruthless спросил: 12 мая 2018 в 04:44 в: python

Может показаться неясным, но вот что я хочу, я хотел бы использовать оба экземпляра в функции random.choice.

Итак, вот код:

B = True
C = True
x = random.choice([B, C])
d = ?

Я хочу (d) провести выбор слева после того, как выбрано (x), так что, если (x) было (B), я хотел бы (d) удерживать (C).

2 ответа

Есть решение
Alex Hall ответил: 12 мая 2018 в 05:03
x, d = random.sample([B, C], 2)

random.sample([B, C], 2) будет возвращать либо [B, C], либо [C, B] случайным образом, а затем мы будем использовать распаковку кортежа.

Alex ответил: 12 мая 2018 в 04:50

Предполагая, что вы имеете в виду numpy.random.choice (), нет возможности, чтобы функция возвращала оставшийся элемент напрямую.

Легкий способ сделать это для 2 элементов будет чем-то вроде

import numpy
choices = (B, C)
i = numpy.random.choice((0, 1))
chosen = choices[i]
leftover = choices[1 - i]
Ruthless ответил: 12 мая 2018 в 04:59
почему numpy.random.choice ((0, 1)) содержит две скобки?
Linuxios ответил: 12 мая 2018 в 05:02
@ Безжалостный: внутренний набор скобок указывает кортеж, который в этом случае представляет интервал.
Alex ответил: 12 мая 2018 в 05:02
@ Безжалостность, потому что нам нужно передать кортеж выборов как один аргумент, а не два аргумента 0, 1 - на самом деле вы получите ValueError, если вы удалите вторую пару скобок