python从特定索引继续循环

标签 python loops enumerate

我编写了一些使用 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))

上面的代码没有达到我的预期。我虽然枚举会从开始位置开始并在结束位置停止,但事实并非如此。

我写了一个小程序,它确实表现得很奇怪。

>>> 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

我希望枚举从索引 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

不是在起始位置开始索引,而是提供。

最佳答案

实际上,如果你得到了 range 对象,从中进行切片并不是什么大问题,因为 range(n)[:4] 仍然是 range 对象(@MosesKoledoye 提到它是 Python 3 功能)。但如果您有一个列表,为了不创建新列表,您可以选择 itertools.islice ,它将返回迭代器。

from itertools import islice
for index, item in enumerate(islice(range(20), 4, None)):
    print(index, item)

输出

0 4
1 5
2 6
3 7
4 8
...

关于python从特定索引继续循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39976073/

相关文章:

php - 如何在 Laravel 中的一个 html 表中运行两个 foreach 循环?

matplotlib - 枚举matplotlib图中的图

python - 如何限制 Django 应用程序中显示的项目数量

java - 在循环的限定比较中使用随机参数时,它是调用一次随机化函数还是每次循环运行时调用?

vb.net - asp.net vb 网站循环遍历数据库行

MySQL:枚举和计数

python - Python While 循环中的赋值条件

Python 2.7 32 位安装在 Win 7 : No registry keys?

python - 我收到异常值 :No module named views in django