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

Я извлекаю некоторую информацию из файла CSV в список и хочу, чтобы из этого списка было выбрано случайное значение. Однако это значение должно существовать в пределах указанного диапазона. Например, если у меня есть такой список:

[12, 100, 144, 50, 65, 30, 500, 450, 6]

и у меня есть диапазон 55-300, я хочу иметь возможность случайным образом выбирать из этого списка любое значение, удовлетворяющее этому диапазону. Скажем, 100, 144 или 65, но никогда 12, 6, 30 и т. д.

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

По сути, я ищу функциональность, которая могла бы объединить эти две функции.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
92
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

Вы можете отфильтровать числа в своем списке, чтобы найти числа в соответствующем диапазоне, и выбрать одно из них случайным образом.

lst = [12, 100, 144, 50, 65, 30, 500, 450, 6]
number = random.choice([n for n in lst if 55 <= n <= 300])
if n in range(55, 301) тоже подойдет.
matszwecja 28.08.2024 16:13

@matszwecja Хотя кажется уродливее и медленнее. Есть преимущество?

no comment 28.08.2024 17:16

@nocomment Я не согласен по поводу уродливой части, я думаю, что это более читабельно и гибко. Он также не будет значительно медленнее, in range имеет приличную оптимизацию.

matszwecja 29.08.2024 09:30

Спасибо, это отлично работает. Понимание списка полностью вылетело у меня из головы!

NoSleepTonight 29.08.2024 11:00

Если вы сначала отфильтруете свой список между этими целыми числами, а затем выберете из этого отфильтрованного списка, вы получите желаемый результат:

lst = [12, 100, 144, 50, 65, 30, 500, 450, 6]
filtered_lst = [i for i in lst if i > 55 and i < 300]
random.choice(filtered_lst)

(при необходимости замените < на <= и т. д.)

Я вижу, что, по сути, тот же ответ был опубликован, когда я писал это, поэтому я его не видел. я не копировал

Emi OB 28.08.2024 16:34
import random

Ваш список номеров

numbers = [12, 100, 144, 50, 65, 30, 500, 450, 6]

Указанный диапазон

min_value = 55
max_value = 300

Отфильтруйте список, чтобы он включал только числа в указанном диапазоне.

filtered_numbers = [num for num in numbers if min_value <= num <= max_value]

Выберите случайное значение из отфильтрованного списка

if filtered_numbers:
    random_value = random.choice(filtered_numbers)
    print(f"Random value within range: {random_value}")
else:
    print("No values within the specified range.")

Что-то вроде этого должно работать для вашего сценария:

import random 
lst = [12, 100, 144, 50, 65, 30, 500, 450, 6]
find_num = lambda lst, low, upper : random.choice([item for item in lst if item >= low and item <= upper ]) 
print(find_num(lst,55,300))

Выбор до тех пор, пока не окажется в диапазоне:

import random

lst = [12, 100, 144, 50, 65, 30, 500, 450, 6]

while not 55 <= (x := random.choice(lst)) <= 300:
    pass

print(x)

Попробуйте это онлайн!

Другие вопросы по теме