I believe than answer you are looking for is using generator expressions with numpy.fromiter.
numpy.fromiter((<some_func>(x) for x in <something>),<dtype>,<size of something>)
Generator expressions are lazy – they evaluate the expression when you iterate through them.
Using list comprehensions makes the list, then feeds it into numpy, while generator expressions will yield one at a time.
Python evaluates things inside -> out, like most languages (if not all), so using [<something> for <something_else> in <something_different>] would make the list, then iterate over it.