使用while循环时有点麻烦。我理解这个基本的for循环遍历传递给函数的任何内容但是我如何将for循环更改为while循环?认为它就像将for改变为while一样容易,但显然不是这样。
def print_data(items):
for item in items:
print(item)
答案 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'))
答案 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