A little bit of profiling of Martijn's two Python 3 accepted solutions (tested on 3.7.4):
enumerate():
python -m timeit -s "numbers = ['One', 'Two', 'Three', 'Four', 'Five']" "for i, n in enumerate(numbers): i*2"
500000 loops, best of 5: 403 nsec per loop
zip(count(...), ...):
python -m timeit -s "from itertools import count; numbers = ['One', 'Two', 'Three', 'Four', 'Five']" "for i, n in zip(count(step=2), numbers): i"
500000 loops, best of 5: 690 nsec per loop
zip/count method is 1.7x slower.
enumerate(...) & len(numbers) == 5000:
python -m timeit -s "numbers = ['One', 'Two', 'Three', 'Four', 'Five'] * 1000" "for i, n in enumerate(numbers): i*2"
1000 loops, best of 5: 324 usec per loop
zip(count(...), ...) & len(numbers) == 5000:
python -m timeit -s "from itertools import count; numbers = ['One', 'Two', 'Three', 'Four', 'Five'] * 1000" "for i, n in zip(count(step=2), numbers): i"
1000 loops, best of 5: 219 usec per loop
With list length of 5000, zip/count method is a third faster, my guess is that the overhead of creating both the zip and count objects makes that method slower for small lists but that is eventually outweighed by having to perform i * 2 so often in with a large number of iterations.
And of course, while the proportions look significant, in the first case we are talking a difference of 0.000000287 seconds, and in the large list case, 0.000105 seconds difference.
enumerateandprint 2*i, number