The first one is inherently better. It depends on the implementation and platform, but the first one allows the python core to do the instructions in a parallel manner. The second one is an iteration that is much harder for the runtime engine to do in parallel. Some C and C++ compilers are able to detect even these cases, but I don't think it is possible to do so in python. As far as I remember, the marshal byte code that python generated used to have no such optimizations a few years ago when I was into that.
The main difference is between the functional programming and sequential programming. On current platforms and with today's CPUs, I believe it can be much more efficient to use functional programming paradigm when it makes sense.
In brief, the mantra is don't decide for the things the compiler or runtime can decide better than you. You may not be able to tell whether your target is able to do parallel calculations, but the runtime can, and this way you allow it to choose.
Also the first one has a pythonic thinking. And also, it is more readable in my opinion.