何时使用;而";或;至于;用Python
我发现在Python中何时应该使用何时使用;而";或;至于;用Python,python,loops,Python,Loops,我发现在Python中何时应该使用while循环或for循环存在问题。看起来人们更喜欢使用for循环(代码行更少?)。是否有任何具体情况我应该使用其中一种?这是个人喜好的问题吗?到目前为止,我读过的代码让我觉得它们之间有很大的区别。for的对于迭代列表来说是一个更具python风格的选择,因为它更简单、更容易阅读 例如: for i in range(11): print i 比以下内容更简单、更容易阅读: i = 0 while i <= 10: print i
while
循环或for
循环存在问题。看起来人们更喜欢使用for
循环(代码行更少?)。是否有任何具体情况我应该使用其中一种?这是个人喜好的问题吗?到目前为止,我读过的代码让我觉得它们之间有很大的区别。for的对于迭代列表来说是一个更具python风格的选择,因为它更简单、更容易阅读
例如:
for i in range(11):
print i
比以下内容更简单、更容易阅读:
i = 0
while i <= 10:
print i
i = i + 1
i=0
while iwhile
在中断条件在逻辑上不依赖于任何类型的序列的情况下非常有用。例如,考虑不可预测的交互:
while user_is_sleeping():
wait()
当然,您可以编写一个适当的迭代器来封装该操作,并通过for
使其可访问,但这将如何提高可读性呢
在Python中的所有其他情况下,使用for
(或封装循环的适当高阶函数)
假设用户\u正在睡眠
函数返回False
当为False时,示例代码可以重写为以下for
循环:
for _ in iter(user_is_sleeping, False):
wait()
for i in mylist:
print i
it = mylist.__iter__()
while True:
try:
print it.next()
except StopIteration:
break
是的,while和for之间有很大的区别
for语句遍历集合、可编辑对象或生成器函数
while语句只是循环直到条件为False
这不是偏好。这是一个数据结构是什么的问题
通常,我们将要处理的值表示为范围
(实际列表)或xrange
(生成值)。这为我们提供了为for语句量身定制的数据结构
但是,一般来说,我们有一个现成的集合:集合、元组、列表、映射甚至字符串已经是一个iterable集合,因此我们只需使用for循环
在一些情况下,我们可能希望为自己完成一些函数式编程处理,在这种情况下,我们可以将转换作为迭代的一部分来应用。sorted
和enumerate
函数对一个iterable应用一个转换,该转换自然地符合for语句
如果没有整洁的数据结构进行迭代,或者没有驱动处理的生成器函数,则必须使用,而For循环通常可以更清楚地说明迭代在做什么。您不能总是直接使用它们,但大多数情况下,while循环的迭代逻辑可以包装在生成器func中。例如:
def path_to_root(node):
while node is not None:
yield node
node = node.parent
for parent in path_to_root(node):
...
而不是
parent = node
while parent is not None:
...
parent = parent.parent
首先,python中的for循环与其他语言中的for循环存在差异。
在python中,它迭代一系列值(例如[4,3,2,7]中的值),而在大多数其他语言(C/C++、Java、PHP等)中,它充当While循环,但更易于阅读
For循环通常在迭代次数已知时使用(例如数组的长度),而while循环则在不知道需要多长时间时使用(例如,只要值未排序,就使用循环的算法)考虑处理iterables。您可以使用for
循环执行此操作:
for _ in iter(user_is_sleeping, False):
wait()
for i in mylist:
print i
it = mylist.__iter__()
while True:
try:
print it.next()
except StopIteration:
break
或者,您可以使用while
循环来执行此操作:
for _ in iter(user_is_sleeping, False):
wait()
for i in mylist:
print i
it = mylist.__iter__()
while True:
try:
print it.next()
except StopIteration:
break
这两个代码块以基本相同的方式做基本相同的事情。但是for
循环隐藏了迭代器的创建和StopIteration
异常的处理,因此您不需要自己处理它们
我能想到的唯一一次使用while
循环来处理iterable的情况是,如果出于某种原因需要直接访问迭代器,例如,在某些情况下需要跳过列表中的项
使用for循环
当您有明确的迭代时(迭代次数已知)
使用示例:
- 以确定的范围迭代循环:
对于范围(23)中的i:
- 遍历集合(字符串、列表、集合、元组、字典):
对于图书中的图书:
while循环是循环重复时使用的一种不定循环
未知次数,并在满足某个条件时结束
注意,在while循环的情况下,循环的缩进体应在测试条件下修改至少一个变量,否则结果为无限循环
使用示例:
- 代码块的执行要求用户输入指定的输入:
,而输入==指定的输入:
- 当您有使用比较运算符的条件时:
while count
参考资料:,.while loop更适合普通循环
在处理字符串(如列表、字符串等)时,for循环比while循环好得多。如果您的数据不干净,并且无法处理for循环,则需要清理数据。因此我们可以说,在python中,“while”更不受欢迎?@fabio。。。不完全是。有一些循环只能合理地使用while编写,但在大多数情况下,您应该尝试优先使用for而不是while。更重要的是可读性问题,您可以同时使用这两个迭代,但最好使用While来表示更模糊的数据结构。@fabio:“更重要的是可读性问题”。不,这是一个匹配算法和数据结构的问题。没有任何想法或任何“更可取的”。很简单。除非不可能,否则使用。如果出于某种原因,for是不可能的,那么while。说出来是一回事,表现出来是另一回事。您应该展示一个示例,其中“f