在枚举python中包含stop参数的最简单方法?

时间:2014-02-11 00:07:24

标签: python python-2.7 indexing iterator enumerate

有一种简单的方法可以迭代一个允许指定终点的可迭代对象,比如-1,以及枚举中的起始点。 e.g。

for i, row in enumerate(myiterable, start=2): # will start indexing at 2

因此,如果我的对象的长度为10,那么让它开始在索引2处迭代并停止在索引9处迭代的最简单方法是什么?

或者,来自itertools的东西更适合这个。我对高性能方法特别感兴趣。

此外,当在2.6中引入启动选项时,是否有任何理由没有停止选项?

干杯

3 个答案:

答案 0 :(得分:8)

我认为你误解了'start'关键字,它没有跳到迭代中的第n项,它开始在n处计数,例如:

for i, c in enumerate(['a', 'b', 'c'], start=5):
    print i, c

给出:

5 a
6 b
7 c

对于像列表和元组这样的简单迭代,最简单,最快速的方法就是:

obj = range(100)
start = 11
stop = 22
for i, item in enumerate(obj[start:stop], start=start):
    pass

答案 1 :(得分:5)

for i, row in enumerate(myiterable, start=2):
   if i>= limit: break
   ...

for i,row in itertools.takewhile(lambda (i,val):i < limit,enumerate(myiterable,2)):

改写另一个建议(请注意,只有当你的iterable是一个可切片的对象时它才会起作用)

start,stop = 11,20
my_items = range(100)
for i,row in enumerate(my_items[:stop-start],start):
      ....

答案 2 :(得分:0)

如果我不打算使用可迭代项的整个长度,我发现使用以下内容更容易:

for i in range(2, len(myiterable)):

而不是枚举。然后在循环内基于 i 进行索引。与使用枚举的其他方法相比,它需要的输入更少。