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

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

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

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

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

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

🤔 А знаете ли вы, что...
Python популярен в машинном обучении и искусственном интеллекте.


1
92
5

Ответы:

Решено

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

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)

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