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