Я извлекаю некоторую информацию из файла CSV в список и хочу, чтобы из этого списка было выбрано случайное значение. Однако это значение должно существовать в пределах указанного диапазона. Например, если у меня есть такой список:
[12, 100, 144, 50, 65, 30, 500, 450, 6]
и у меня есть диапазон 55
-300
, я хочу иметь возможность случайным образом выбирать из этого списка любое значение, удовлетворяющее этому диапазону. Скажем, 100
, 144
или 65
, но никогда 12
, 6
, 30
и т. д.
Мне нигде не удалось найти решение этой проблемы, и модуль random
, похоже, не имеет каких-либо функций, которые бы поддерживали это напрямую.
random.randrange()
выдает значение только из диапазона, random.choice()
выбирает только один элемент из списка, к нему не применяется никакой диапазон.
По сути, я ищу функциональность, которая могла бы объединить эти две функции.
🤔 А знаете ли вы, что...
Python популярен в машинном обучении и искусственном интеллекте.
Вы можете отфильтровать числа в своем списке, чтобы найти числа в соответствующем диапазоне, и выбрать одно из них случайным образом.
lst = [12, 100, 144, 50, 65, 30, 500, 450, 6]
number = random.choice([n for n in lst if 55 <= n <= 300])
Если вы сначала отфильтруете свой список между этими целыми числами, а затем выберете из этого отфильтрованного списка, вы получите желаемый результат:
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)
(при необходимости замените < на <= и т. д.)
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)