Tom*_*ith 3 python indexing iterator enumerate python-2.7
有一种简单的方法来迭代一个可迭代的对象,它允许指定一个终点,比如-1,以及枚举中的起始点.例如
for i, row in enumerate(myiterable, start=2): # will start indexing at 2
Run Code Online (Sandbox Code Playgroud)
因此,如果我的对象长度为10,那么让它开始在索引2处迭代并停止在索引9处迭代的最简单方法是什么?
或者,来自itertools的东西更适合这个.我对高性能方法特别感兴趣.
另外,当在2.6中引入启动选项时,是否有任何理由没有停止选项?
干杯
Bi *_*ico 10
我认为你误解了'start'关键字,它没有跳到iterable中的第n项,它开始在n处计数,例如:
for i, c in enumerate(['a', 'b', 'c'], start=5):
print i, c
Run Code Online (Sandbox Code Playgroud)
得到:
5 a
6 b
7 c
Run Code Online (Sandbox Code Playgroud)
对于像列表和元组这样的简单迭代,最简单和最快速的方法将是:
obj = range(100)
start = 11
stop = 22
for i, item in enumerate(obj[start:stop], start=start):
pass
Run Code Online (Sandbox Code Playgroud)
for i, row in enumerate(myiterable, start=2):
if i>= limit: break
...
Run Code Online (Sandbox Code Playgroud)
要么
for i,row in itertools.takewhile(lambda (i,val):i < limit,enumerate(myiterable,2)):
Run Code Online (Sandbox Code Playgroud)
重写另一个建议(请注意,只有当你的iterable是一个可切片的对象时它才会起作用)
start,stop = 11,20
my_items = range(100)
for i,row in enumerate(my_items[:stop-start],start):
....
Run Code Online (Sandbox Code Playgroud)