Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python从特定索引继续循环_Python_Loops_Enumerate - Fatal编程技术网

python从特定索引继续循环

python从特定索引继续循环,python,loops,enumerate,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_ind

我编写了一些代码,使用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 index, item in enumerate(list[4:]):
    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
我希望枚举从索引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
不要在开始位置开始索引,而是提供。

您可以执行以下操作:

for index, item in enumerate(list, start_index):
    print(str(index))
for index, item in enumerate(list[4:]):
    print(str(index))

enumerate
start
参数与选择iterable的哪些元素无关。它只是告诉enumerate从哪个数字开始

>>> list(enumerate(range(3)))
[(0, 0), (1, 1), (2, 2)]
>>> list(enumerate(range(3), 1))
[(1, 0), (2, 1), (3, 2)]
如果要从特定索引开始,则需要提供start参数和:


实际上,如果你得到了
range
object,那么从它上面切一块也没什么大不了的,因为
range(n)[:4]
仍然是
range
对象(正如@MosesKoledoye提到的,它是Python 3的特性)。但是如果您得到一个列表,为了不创建新的列表,您可以选择它,它将返回迭代器

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

如果您这样做,列表索引将不会与枚举输出对齐。@kojiro然后您可以对枚举中的索引项执行
(列表[4:],4):
我认为
start
参数是修饰性的。当你想从1开始计数时通常很有用,而不是默认的0。顺便说一下:我感觉你在这里做的事情有点代码味道。您不需要
枚举
,因为这意味着您正在修改列表的成员并将其设置回原位。如果静态处理列表,则根本不需要管理索引,只需在片上迭代即可。
range(n)[:4]
仍然是range对象,仅适用于Python3@MosesKoledoye你说得对,我会在回答中提到这一点;对于索引,枚举中的项(islice(范围(20),4,无),4);这将使bot的索引从4开始,同时the@user1610950那就行了,很高兴帮助了你!