枚举2的Python循环

时间:2016-06-24 06:30:49

标签: python list for-loop

我不是100%肯定如何提出问题的标题,但我想做的事情很简单。我想使用Python中的枚举函数循环遍历一个列表,但是我想知道是否可以通过2执行它,我会做的事情没有枚举,如下所示:

numbers = ['One', 'Two', 'Three', 'Four', 'Five']

i = 0
for number in numbers:
    print(i, number)
    i += 2

是否可以使用枚举函数(Pythonic方式)来实现,或者我应该像示例中那样做?

2 个答案:

答案 0 :(得分:1)

enumerate()输出乘以两个:

for i, number in enumerate(numbers):
    print(i * 2, number)

这基本上是{3}}对象在Python 3中的作用;计算任何给定指数的数量。由于您的系列从0开始,您所要做的就是将range()乘以步长。

另一种方法是i一个itertools.count() object

zip()

Python 3中的演示:

from itertools import count
try:
    # Python 2, use the iterator version of zip
    from future_builtins import zip
except ImportError:
    # Python 3
    pass

for i, number in zip(count(step=2), numbers):
    print(i, number)

答案 1 :(得分:0)

对Martijn的两个Python 3接受的解决方案(在3.7.4上测试)进行了一些分析:

枚举()

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方法要慢1.7倍。

枚举(...)和len(数字)== 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

列表长度为5000,zip / count方法快了三分之一,我的猜测是创建zipcount对象的开销使得对于较小的列表,此方法较慢,但最终由于必须频繁执行i * 2而需要进行大量的迭代,因此最终无法解决问题。

当然,尽管比例看起来很重要,但在第一种情况下,我们说的是相差0.000000287秒,而在大型列表中,我们说的是相差0.000105秒。