@pavelfoki

Как добавить исключения для random?

Здравствуйте, у меня есть список исключений ext = 5, 10, 21, 51, 101, 41, 11, 31, 22, 71 и rnd = random.randint(1, 102) Мне нужно, чтобы random.randint учитывал исключения из списка ext . Я пробовал два способа: 1 - сделать при помощи if, else -
rx = re.compile('\d+')
if rnd in rx.findall(str(ext)):
     # возвращаемся к функции с рандомом
else:
     # выполняем код
Однако, если список исключений большой, т.е в него входит к примеру 90 % от всех чисел, которые можно сгенерировать ext = 1,2,3,4,5,6,7,8,9,10,11 ... 99,100,101 то тогда python выводит ошибку о том, что достигнуто максимальное количество "обращений" к его объекту. Это тоже можно решить, но при замедлении кода, он как не странно будет работать медленнее, а мне этого не надо.
И второй способ, который казался спасением -
rnd1 = [i for i in range(1, 102)]
rnd1.remove(ext)
rnd = random.choice(rnd1)
однако, в rnd1.remove можно поместить только 1 значение int. Была мысль сделать это при помощи цикла, но есть подозрение, что при больших значениях это будет ещё медленнее чем первый способ..

Помогите пожалуйста, как это можно решить?
  • Вопрос задан
  • 641 просмотр
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
while True:
    rnd = random.randint(1, 102)
    if rnd not in ext:
        break


Либо через list comprehension
random.choice([num for num in range(1,103) if num not in ext])
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы