At issue here is your use of the zip()
function. It produces a list of tuples up front. You created a copy of the original list with numbers added. From the documentation:
This function returns a list of tuples, where the i-th tuple contains the i-th element from each of the argument sequences or iterables.
Emphasis mine.
Thus, altering the elem_l
in the loop does not affect the loop iteration count.
enumerate()
on the other hand produces indices on demand, and as the elem_l
list is deleted from, there are fewer elements to produce. You’d get the same outcome if you produced a copy of elem_l
instead:
for i, e in enumerate(elem_l[:]):
where the [:]
identity slice produces a new list, independent of the original elem_l
list you then delete from in the loop.
1
solved the difference between zip and enumerat in for loop? [closed]