如何将此循环更改为while循环?

时间:2015-06-10 08:09:56

标签: python

使用while循环时有点麻烦。我理解这个基本的for循环遍历传递给函数的任何内容但是我如何将for循环更改为while循环?认为它就像将for改变为while一样容易,但显然不是这样。

def print_data(items):
 for item in items:
    print(item)

6 个答案:

答案 0 :(得分:1)

您可以执行类似的操作,使用while循环具有相同的打印功能:

def print_data(items):
    i = 0
    while i < len(items):
        print items[i]
        i += 1

答案 1 :(得分:1)

这是一个while循环版本,通过构造迭代器并手动移动它来工作。无论输入是生成器还是列表,它都可以工作。

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

print_data([1,2,3])

答案 2 :(得分:0)

一个适用于列表和生成器的选项是构造一个迭代器,然后使用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'))

有关next内置函数和文档中iterators的更多信息。

答案 3 :(得分:0)

如果您正在学习Python:

如果你需要遍历一个iterable(一个列表,一个生成器,一个字符串等......简而言之,而不是精确的单词,包含东西,并且可以“逐一”给出那些东西......)你最好使用{ {1}}。

在Python中,for是为迭代创建的,因此您不需要for

如果您正在学习编程:

while需要一个条件来保持循环,你创建自己的条件,使一个计数器增加每个循环,并使while循环去,而这个计数器小于或等于你的长度项目,如Mathias711的回答所示。

答案 4 :(得分:0)

您正在使用的for循环正在迭代所谓的iterator

这意味着遍历可迭代对象(列表,生成器,dicts,...)并返回内置函数[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'])

答案 5 :(得分:-1)

你可以试试这个

 def print_data(items):
   i =0
   while items:
     if i < len(items):
       print items[i]
       i = i+1
     else:
       break