Использование while в понимании списка или выражениях генератора

Я могу использовать if и для в выражениях списков / генераторов как

list(i for i in range(100) if i*i < 30)

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

list(i for i in range(100) while i*i < 30)

Однако , а не понимается в выражениях генератора. Итак, мой вопрос: как мне написать выражение генератора с условием остановки, чтобы оно не продолжало вычисления, даже если оно не дает новых значений.

19
задан Eric 23 June 2015 в 19:31
поделиться