Условная фильтрация в генераторе со случайным целым числом

Я хотел бы создать генератор случайных чисел.

import numpy as np

rd_list = (np.random.randint(10) for i in range(6))

Когда я пытаюсь с этим, я получаю значения [7, 1, 4, 2, 0, 6].

Я хотел бы отфильтровать эти результаты по этому условию <5.

Как я могу получить этот результат?

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

S3DEV 03.05.2022 21:03

Хотите получить 6 случайных чисел от 3 до 10?

Andrej Kesely 03.05.2022 21:05

Я хочу создать список случайных чисел, но только если каждое число удовлетворяет условию.

SalvaHH 03.05.2022 21:06
np.random.randint(0, 5, 6) сгенерирует 6 чисел из [0, 5)
Andrej Kesely 03.05.2022 21:07

У вас есть источник 6 чисел. Вы хотите, чтобы 6 чисел соответствовали вашему условию, или вы просто хотите отфильтровать меньшие числа из шести?

chepner 03.05.2022 21:08

Я понимаю, но я не хочу всегда получать 6 номеров. Я хочу фильтровать внутри генератора по условию,

SalvaHH 03.05.2022 21:09

Я хочу отфильтровать меньшие числа из шести

SalvaHH 03.05.2022 21:09

Передайте условное значение в качестве аргумента функции, которая генерирует числа.

S3DEV 03.05.2022 21:09

Этот вопрос не ясен. Если вы хотите генерировать случайные числа ниже 5, то почему вы передаете 10 в randint? Если ваш вопрос заключается в том, как отфильтровать список чисел, то это не имеет ничего общего со случайными числами.

DeepSpace 03.05.2022 21:09

Как я могу передать условное значение в качестве аргумента в функцию?

SalvaHH 03.05.2022 21:11

хорошо, значит что-то вроде my_gen = (value for value in np.random.randint(0, 10, 6) if my_func(value) < 5) ?

Andrej Kesely 03.05.2022 21:12

@DeepSpace Если я передаю 5 в randint, я всегда получаю 6 случайных чисел меньше 5. Я хочу получить 6 случайных чисел от 0 до 9, а затем отфильтровать результаты > 5.

SalvaHH 03.05.2022 21:12

@AndrejKesely я получаю сообщение об ошибке с вашим кодом

SalvaHH 03.05.2022 21:13

В чем смысл фильтрации? Просто сгенерируйте случайные целые числа «правильно» (по желанию). (?)

S3DEV 03.05.2022 21:14

@S3DEV Если я генерирую случайное целое число с помощью np.random.randint(5), я всегда получаю список из 6 элементов. Если я отфильтрую случайные числа. Я всегда получаю списки разной длины.

SalvaHH 03.05.2022 21:15
Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
15
30
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

for i in range(6):
    a = np.random.randint(10)
    if a < 5:
        List.append(a)

Я хотел бы сделать это с помощью генератора

SalvaHH 03.05.2022 21:17
Ответ принят как подходящий

Другой способ использования выражения присваивания (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)

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