я могу использовать if
и for
в списковых/выражений генератора в качествеИспользование в то время как в списке понимание или генератор выражений
list(i for i in range(100) if i*i < 30)
Я знаю, что это не самый эффективный, но медведь со мной, как условие может быть гораздо больше сложный, и это всего лишь пример. Тем не менее, это все еще проходит через сотни итераций и только дает значение в первой 6. Есть ли способ сказать выражение генератора, где остановиться с чем-то вроде этого:
list(i for i in range(100) while i*i < 30)
Однако while
не понят в генераторе выражения. Итак, мой вопрос: как написать выражение генератора с условием остановки, чтобы он не продолжал вычисление, даже если он не дает новых значений.
Только примечание: вы можете сгенерировать список напрямую, используя '[i для i в диапазоне (100)]' – Joril
Любопытно, что был [PEP3142] (https://www.python.org/dev/peps/ pep-3142 /), открытый в то время, когда задавался этот вопрос. Приведенный пример использования почти такой. Гвидо обнародовал его в мае 2013 года –