带有枚举2的Python循环
我不是100%确定如何提出问题的标题,但我想做的很简单。我想使用Python中的enumerate函数循环遍历一个列表,但我想知道是否可以使用2来完成它,如果不使用enumerate,我会这样做:带有枚举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方式)执行此操作,或者我
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