簡體   English   中英

在循環中執行循環列表在python中有索引

[英]Doing loop while list has indexes in python

假設我們的列表包含未知數量的索引,是否可以執行類似的操作

i=0
while foo[i]:
    ...
    i+=1

在我的例子中,我得到錯誤,因為索引將超出范圍,但我認為你有我想要的?

你在尋找的是:

for i, elem in enumerate(foo):
    #i will equal the index
    #elem will be the element in foo at that index
    #etc...

enumerate內置需要一些序列(如列表或生成器),並產生一個元組,其中第一個元素包含迭代編號,第二個元素包含該迭代序列的值。

由於您特別詢問“未知數量的索引”,我還想澄清一下, enumerate是懶惰的。 len不同, len需要提前計算/評估整個序列(假設您正在處理比簡單列表更復雜的事情),並因此無法獲得無限列表,並為某些任意生成器花費不確定的時間函數(然后需要再次運行,可能導致副作用), enumerate僅計算列表中的下一個序列。 這可以通過以下事實來顯示:它將按照預期最簡單的方式執行具有未知條目數的序列的示例:無限列表:

import itertools
for i, elem in enumerate(itertools.cycle('abc')):
    #This will generate -
    # i = 0, elem = 'a'
    # i = 1, elem = 'b'
    # i = 2, elem = 'c'
    # i = 3, elem = 'a'
    # and so on, without causing any problems.

編輯 - 回應您的意見:

使用for ... enumerate ...本質上比使用for更昂貴(假設你有額外的enumerate開銷)。 但是 ,我認為如果你正在跟蹤你的序列元素的索引,那么這個小小的開銷對於它提供的非常pythonic的表示來說是一個很小的代價(也就是說, i=0; i += 1是非常C風格的成語)。

在做了一點搜索之后,我挖出了(然后agf更正了url) 枚舉函數的源代碼 (另外, reversed函數)。 它非常簡單,它看起來並不昂貴。

如果你有一個python列表,你可以使用for循環迭代列表:

for i in list

如果你必須使用while循環,你可以嘗試

i=0
while i<len(foo):
  ...
  i+=1

不是最流暢的方式,但你可以完成你所做的,但抓住異常。

i = 0
try:
    while foo[i]:
        ...
        i += 1
except IndexError:
    pass

這將在列表中的任何點結束,其中元素具有測試為false的值,或者如果沒有false值則處理整個列表。 如果您想要的是始終處理整個列表,即使它包含錯誤值,請將while foo[i]更改為while 1 你必須在循環體中訪問foo [i](我假設你還是想要)來觸發異常並避免無限循環。

您可以使用for循環while循環
Python提供了各種方法來迭代列表而不知道它的索引。

對於循環:

for i in li:

或者你可以使用

for i in range(len(li))

在這種情況下,迭代器將是一個整數,它在各種情況下都派上用場。

循環:

while i<len(li):
   ----
   i = i+1

在python中迭代列表時,我更喜歡使用for循環

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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