簡體   English   中英

如何將此for循環更改為while循環?

[英]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 的內置next函數。 當迭代器到達終點時,下一個函數將引發一個 StopIteration 異常,您可以使用它來中斷循環:

def print_data(items):
    it = iter(items)
    while True:
        try:
            print next(it)
        except StopIteration:
            break

print_data(['a', 'b', 'c'])
print_data(('a', 'b', 'c'))

文檔中有更多關於下一個內置函數和迭代器的信息。

如果你正在學習 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.

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