簡體   English   中英

python從特定索引繼續循環

[英]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
...

enumeratestart參數與選擇迭代器的哪些元素沒有任何關系。 它只是告訴枚舉以什么數字開頭。

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM