Python - ограничение выдачи генератором по количеству элементов
Вопрос сугубо технический Дефолтно генератор [x for x in list if f()] вернет все элементы из множества list соответствующие условию f(). Мне необходимо ограничить эту выдачу по количеству, что бы было, например, не более 10 элементов на выходе.
Дело вот какое, насколько я понимаю если в f() забита какая-нибудь интересная формула, то генератор совершит эту операцию некоторое множество раз, при объеме списков в 10 000, будет произведено 10 000 операций, в то время как мне они ну вот совершенно не нужны.
Пока в голову приходит только написание отдельной функции обработки множества, но это получается на каждый генератор(а их у меня очень много) - придется писать свою функцию.
В общем вопрос еще раз - как ограничить объем выдачи генератора. Может как то можно прикрутить каунтер?
Ответы (1 шт):
list(itertools.islice((x for x in list if f()), 10))
# ------------------------
Обратите внимание что квадратные скобки вокруг вашего выражения стали круглыми. Это генератор, он ленивый. f будет вызываться только до тех пор как вернёт True десять раз, не более.
P.S. Квадратные скобки - не генератор (который ленивый), а list comprehension (который жадный).