Я хотел бы создать генератор случайных чисел.
import numpy as np
rd_list = (np.random.randint(10) for i in range(6))
Когда я пытаюсь с этим, я получаю значения [7, 1, 4, 2, 0, 6].
Я хотел бы отфильтровать эти результаты по этому условию <5.
Как я могу получить этот результат?
Хотите получить 6 случайных чисел от 3 до 10?
Я хочу создать список случайных чисел, но только если каждое число удовлетворяет условию.
np.random.randint(0, 5, 6)
сгенерирует 6 чисел из [0, 5)
У вас есть источник 6 чисел. Вы хотите, чтобы 6 чисел соответствовали вашему условию, или вы просто хотите отфильтровать меньшие числа из шести?
Я понимаю, но я не хочу всегда получать 6 номеров. Я хочу фильтровать внутри генератора по условию,
Я хочу отфильтровать меньшие числа из шести
Передайте условное значение в качестве аргумента функции, которая генерирует числа.
Этот вопрос не ясен. Если вы хотите генерировать случайные числа ниже 5
, то почему вы передаете 10
в randint
? Если ваш вопрос заключается в том, как отфильтровать список чисел, то это не имеет ничего общего со случайными числами.
Как я могу передать условное значение в качестве аргумента в функцию?
хорошо, значит что-то вроде my_gen = (value for value in np.random.randint(0, 10, 6) if my_func(value) < 5)
?
@DeepSpace Если я передаю 5 в randint, я всегда получаю 6 случайных чисел меньше 5. Я хочу получить 6 случайных чисел от 0 до 9, а затем отфильтровать результаты > 5.
@AndrejKesely я получаю сообщение об ошибке с вашим кодом
В чем смысл фильтрации? Просто сгенерируйте случайные целые числа «правильно» (по желанию). (?)
@S3DEV Если я генерирую случайное целое число с помощью np.random.randint(5), я всегда получаю список из 6 элементов. Если я отфильтрую случайные числа. Я всегда получаю списки разной длины.
for i in range(6):
a = np.random.randint(10)
if a < 5:
List.append(a)
Я хотел бы сделать это с помощью генератора
Другой способ использования выражения присваивания (Python 3.8+):
import random
nums = (n for _ in range(6) if (n := random.randint(0, 10)) < 5)
Благодаря комментарию Андрея: Поскольку вы уже используете numpy
, вам не нужен цикл:
import numpy as np
nums = (n for n in np.random.randint(0, 10, 6) if n < 5)
Не могли бы вы обновить вопрос, чтобы он был более конкретным? Я могу придумать много способов приблизиться к этому. Пожалуйста, уточните требования.