[英]How to change this for loop to while loop?
while 循環有點麻煩。 我理解這個基本的 for 循環會貫穿傳遞給函數的任何內容,但是我如何將 for 循環更改為 while 循環? 認為這就像將 for 更改為 while 一樣容易,但顯然並非如此。
def print_data(items):
for item in items:
print(item)
您可以執行以下操作,以通過 while 循環獲得相同的打印功能:
def print_data(items):
i = 0
while i < len(items):
print items[i]
i += 1
這是一個while
循環版本,它通過構造一個迭代器並手動遍歷它來工作。 無論輸入是生成器還是列表,它都可以工作。
def print_data(items):
it = iter(items)
while True:
try:
print next(it)
except StopIteration:
break
print_data([1,2,3])
如果你正在學習 Python:
如果您需要迭代一個可迭代對象(一個列表、一個生成器、一個字符串等。簡而言之,而不是精確的單詞包含一些東西並且可以一個一個地“給出”這些東西......),你最好使用for
.
在 Python 中for
是為可迭代對象而設計的,因此您不需要while
。
如果您正在學習一般的編程:
while
需要滿足一個條件才能繼續循環,您創建自己的條件,創建一個計數器,該計數器將增加每個循環,並在此計數器小於或等於您的項目的長度時執行 while 循環,如 Mathias711 的回答所示.
您正在使用的 for 循環是通過所謂的iterator
。
這意味着遍歷可迭代對象(列表、生成器、字典等)並從內置函數[next()][2]
返回的迭代器中返回下一項。 如果沒有剩余的項目,調用此函數將引發所謂的StopIteration錯誤,從而導致停止迭代。
因此,遍歷可迭代對象的 Pythonic 方法實際上是使用您在問題中提供的 for 循環。 但是,如果您真的想使用 while 循環(至少通常根本不推薦這樣做),則必須使用try-except-block進行迭代,並處理在沒有項目剩余時引發的 StopIteration 錯誤。
def iterate_manually(items):
# convert items list into iterator
iterator = iter(items)
while True:
try:
print(next(iterator))
# handle StopIteration error and exit while-loop
except StopIteration:
break
iterate_manually(['foo', 'bar', 'baz'])
你可以試試這個
def print_data(items):
i =0
while items:
if i < len(items):
print items[i]
i = i+1
else:
break
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.