Какой способ выбора случайного числа является более элегантным, пока его нет в наборе? - PullRequest
0 голосов
/ 17 февраля 2020

Мне интересно, что является более элегантным (если это слово подходит в данном случае) способом генерировать случайное число, пока оно не входит в набор используемых значений. Первый вариант повторяется в том смысле, что у нас есть одинаковая строка для random type как внутри, так и снаружи while-l oop.

Второй, однако, должен добавить условный оператор для выхода из l oop. Я понимаю, что этот конкретный случай тривиален, и обе версии работают, но, на ваш взгляд, Python выглядит более элегантно?

def orchestrator(image = None):
    used_values = set()

    for _ in range(7):
        toss = np.random.random()

        if toss >= 0.5:
            random_type = np.random.randint(1,7,1)[0]
            while random_type in used_values:
                random_type = np.random.randint(1,7,1)[0]
            used_values.add(random_type)
            print(random_type)
def orchestrator(image = None):
    used_values = set()

    for _ in range(7):
        toss = np.random.random()

        if toss >= 0.5:
            while True:
                random_type = np.random.randint(1,7,1)[0]
                if random_type not in used_values:
                    break
            used_values.add(random_type)
            print(random_type)

1 Ответ

6 голосов
/ 17 февраля 2020

Так как вам все равно нужно что-то запоминать, проще go наоборот, запомнить неиспользованные вещи. Это решает несколько проблем: вам никогда не нужно повторять случайную генерацию, и списка достаточно, чтобы вы не получили накладные расходы памяти для набора.

from random import shuffle
unused_values = list(range(7))
shuffle(unused_values)

тогда всякий раз, когда вам нужен новый неповторяющийся случайное число,

random_type = unused_values.pop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...