带有枚举2的Python循环

带有枚举2的Python循环,python,list,for-loop,Python,List,For Loop,我不是100%确定如何提出问题的标题,但我想做的很简单。我想使用Python中的enumerate函数循环遍历一个列表,但我想知道是否可以使用2来完成它,如果不使用enumerate,我会这样做: numbers = ['One', 'Two', 'Three', 'Four', 'Five'] i = 0 for number in numbers: print(i, number) i += 2 是否可以使用enumerate函数(Pythonic方式)执行此操作,或者我

我不是100%确定如何提出问题的标题,但我想做的很简单。我想使用Python中的enumerate函数循环遍历一个列表,但我想知道是否可以使用2来完成它,如果不使用enumerate,我会这样做:

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

i = 0
for number in numbers:
    print(i, number)
    i += 2
是否可以使用enumerate函数(Pythonic方式)执行此操作,或者我应该像示例中那样执行此操作?

只需将
enumerate()
输出乘以两:

for i, number in enumerate(numbers):
    print(i * 2, number)
这就是Python 3中
range()
对象的基本功能;计算任何给定索引的数字。由于序列从0开始,所以只需将
i
乘以步长即可

另一种方法是
zip()
a沿着:

Python 3中的演示:

>>> from itertools import count
>>> numbers = ['One', 'Two', 'Three', 'Four', 'Five']
>>> for i, number in enumerate(numbers):
...     print(i * 2, number)
...
0 One
2 Two
4 Three
6 Four
8 Five
>>> for i, number in zip(count(step=2), numbers):
...     print(i, number)
...
0 One
2 Two
4 Three
6 Four
8 Five

对Martijn的两个Python3公认解决方案(在3.7.4上测试)的一点分析:

枚举()

python-m timeit-s“numbers=['1','2','3','4','5']”表示枚举(数字)中的i,n:i*2
500000个循环,最好为5:403纳秒/循环
压缩(计数(…),…)

python-m timeit-s“来自itertools导入计数;数字=['1'、'2'、'3'、'4'、'5']”表示zip中的i,n(计数(步骤=2),数字):i“
500000个回路,最佳5个:690纳秒/回路
zip
/
count
方法的速度慢了1.7倍

枚举(…)&len(数字)==5000

python-m timeit-s“numbers=['One','Two','Three','Four','Five']*1000”,表示枚举(数字)中的i,n:i*2”
1000个回路,最好为5个:每个回路324 usec
zip(计数(…),…)&len(数字)==5000

python-m timeit-s“来自itertools导入计数;数字=['1'、'2'、'3'、'4'、'5']*1000”“(计数(步骤=2),数字):i”
1000个回路,最佳5个:每个回路219 usec
当列表长度为5000时,
zip
/
count
方法快三分之一,我的猜测是,创建
zip
count
对象的开销使得该方法对于小列表的速度变慢,但这最终会被频繁执行大量迭代的
i*2
所抵消


当然,虽然比例看起来很重要,但在第一种情况下,我们谈论的是
0.000000287
秒的差异,在大列表情况下,
0.000105
秒的差异。

你可以使用
枚举
打印2*i,数字
你的措辞选择有点不清楚。是否要迭代列表中的偶数索引项?
>>> from itertools import count
>>> numbers = ['One', 'Two', 'Three', 'Four', 'Five']
>>> for i, number in enumerate(numbers):
...     print(i * 2, number)
...
0 One
2 Two
4 Three
6 Four
8 Five
>>> for i, number in zip(count(step=2), numbers):
...     print(i, number)
...
0 One
2 Two
4 Three
6 Four
8 Five