Might be I haven’t tested the performance. But the docs for Enum do warn about this:
The functions in this module work in linear time. This means that, the time it takes to perform an operation grows at the same rate as the length of the enumerable
Using comprehensions is probably not a good option for this, because you cannot easily iterate over two items in sync, and have to resort to inefficiently looking up the index as you discovered. If you wanted to do it without Enum, recursion would be a better solution - but that’s what zip_with is doing anyway, so you may as well use that