![](/img/trans.png)
[英]Breaking from parts of a loop in python, but continuing with the rest
[英]python continuing a loop from a specific index
我寫了一些使用枚舉遍歷列表的代碼。
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
...
enumerate
的start
參數與選擇迭代器的哪些元素沒有任何關系。 它只是告訴枚舉以什么數字開頭。
>>> list(enumerate(range(3)))
[(0, 0), (1, 1), (2, 2)]
>>> list(enumerate(range(3), 1))
[(1, 0), (2, 1), (3, 2)]
如果要從特定索引開始,則需要提供start參數和 slice :
for i, v in enumerate(alist[4:], 4):
...
你可以做:
for index, item in enumerate(list[4:]):
print(str(index))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.