【发布时间】:2016-10-11 11:19:09
【问题描述】:
我写了一些代码,使用 enumerate 来遍历一个列表。
for index, item in enumerate(list[start_idx:end_idx])
print('index [%d] item [%s]'%(str(index), item))
列表中的项目只是字符串。有时我不想枚举整个列表,有时我会切分列表做不同的事情。
我遇到问题的部分是python的枚举函数。
文档说你可以做到:
for index, item in enumerate(list, start_index):
print(str(index))
上面的代码没有达到我的预期。我虽然 enumerate 会从开始位置开始并在结束时停止,但事实并非如此。
我写了一个小程序,它的表现确实很不稳定。
>>> for i, x in enumerate(range(0,20),start=4):
... print(str(i)+'\t'+str(x))
...
4 0
5 1
6 2
7 3
8 4
9 5
10 6
11 7
12 8
13 9
14 10
15 11
16 12
17 13
18 14
19 15
20 16
21 17
22 18
23 19
我希望 enumerate 从索引 4 开始并循环到末尾。所以它会得到 4-19 的范围,但它似乎只是开始索引,但仍然从 0-19 迭代..
问题,有没有办法从 python 中的特定索引开始进行迭代循环?
我的预期结果是
>>> for i, x in enumerate(range(0,20),start=4):
... print(str(i)+'\t'+str(x))
...
4 0 # skip
5 1 # until
6 2 # this
7 3 # item
8 4
9 5
10 6
11 7
12 8
13 9
14 10
15 11
16 12
17 13
18 14
19 15
20 16
21 17
22 18
23 19
而不是在开始位置提供索引。
【问题讨论】:
-
start的论点,我想说,是装饰性的。当你想从 1 开始计数时通常很有用,而不是默认的 0 -
顺便说一句:我觉得你在这里做的事情有点代码味道。您不需要
enumerate,因为这意味着您正在修改列表的成员并将它们设置回原位。如果您静态处理列表,则根本不需要管理索引,并且可以简单地遍历切片。