Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 什么时候应该使用for循环还是while循环?_Python_For Loop_While Loop - Fatal编程技术网

Python 什么时候应该使用for循环还是while循环?

Python 什么时候应该使用for循环还是while循环?,python,for-loop,while-loop,Python,For Loop,While Loop,我不知道使用while循环还是for循环更好?我特别担心如何为编码问题提供优化的答案。我发现自己解决问题只是为了发现while循环会更快,但我很困惑是什么导致人们选择使用它而不是for循环,比如我应该寻找什么标准? 下面是我回答的一个编码问题的示例,它检查一个括号字符串是否平衡 def parenCheck(str): stack = Stack() for x in str: if x == '(': stack.push(x)

我不知道使用while循环还是for循环更好?我特别担心如何为编码问题提供优化的答案。我发现自己解决问题只是为了发现while循环会更快,但我很困惑是什么导致人们选择使用它而不是for循环,比如我应该寻找什么标准? 下面是我回答的一个编码问题的示例,它检查一个括号字符串是否平衡

def parenCheck(str):
    stack = Stack()
    for x in str:
        if x == '(':
            stack.push(x)
        else:
            if stack.isEmpty():
                return False
            else:
                stack.pop()
    return stack.isEmpty()
下面是我看到的答案,我知道它更快,因为它不使用for循环:

def parChecker(symbolString):
    s = Stack()
    balanced = True
    index = 0
    while index < len(symbolString) and balanced:
        symbol = symbolString[index]
        if symbol == "(":
            s.push(symbol)
        else:
            if s.isEmpty():
                balanced = False
            else:
                s.pop()

        index = index + 1

    if balanced and s.isEmpty():
        return True
    else:
        return False

对于相同的迭代次数和内容,我猜想For循环和wihile实际上具有相同的速度。但我还没有测试过这一点——我主要回答一些简单的问题,在这些问题中,我们试图避免两个循环中的任何一个,在编译代码中更倾向于迭代

您的示例显示了一种基本情况,其中for的结果是更干净(如果不是更快的话)的代码:

for x in an_iterator:
    <do something>
当我在1990年第一次看到Python时,直接在列表和字典上进行迭代的能力是吸引我注意的主要整洁特性

for循环的一个公共子类会累积非常常见的值,以至于Python提供了流行的列表理解,并将语法扩展到生成器表达式和字典理解

虽然仍然有它的用途。其他语言有do-while和do-until变体,它们试图简化变量步进和测试。Python只有一个版本,有单独的步骤。新的海象操作员有可能清理这一问题:

https://docs.python.org/3/whatsnew/3.8.html#assignment-expressions
while (block := f.read(256)) != '':
    process(block)
当步骤不规则或来自定义良好的迭代器时,while最有用。for可以中断并继续,但在迭代开始时序列是固定的

除了enumerate之外,zip还允许我们一次迭代几件事情


列表理解的便利性鼓励我们将复杂的任务分解为一系列理解。为了使它更方便、更快/内存效率更高,Python提供了生成器和各种itertools。在Python3中,范围键和字典键/项/值都变成了类似生成器的表达式。

这不能由while循环比for循环工作得更快的代码决定。至于您关于何时使用while和for循环的问题,这取决于我们是否知道迭代次数。如果迭代次数已知,则首选for循环,而当迭代次数不确定时,则首选while循环

for (int i : mynumber_list)
从上面可以看出,for循环更具可读性,更简单,更易于遍历。此外,iterator.hasNext进入无限循环的概率非常高


while对于用户选择输入问题也很有用,比如一直执行程序,直到用户按下除y以外的任何其他键。这很难用for循环实现。

您怎么知道它更快?你测量过了吗?为什么你认为while比for在一般情况下要快得多?事实上,我测量过它,上面两个实现中的一个稍有改变,因为没有堆栈定义,而for实现的速度是for实现的两倍,但是第二个实现过于复杂。这两个实现都过于复杂。看起来假设输入字符串完全由括号组成,这意味着您根本不需要堆栈,只需要一个计数器:递增而不是推动,递减而不是弹出,对isEmpty的调用由对0的相等检查代替。For循环用于迭代序列的元素。当您有一段代码要重复n次时,通常会使用它。While循环用于重复一段代码。它不是一次运行代码块,而是多次执行代码块,直到满足某个条件。您还可以在内部使用break和continuewhile@AlejandroBlasco,事实上,while-True:with-conditional break是while最常见的用法之一。到while循环的转换并不十分准确:并非所有迭代器都是可索引的。它们的共同点是,您可以在下一步调用它们,直到它们提出“Stopiteration”。
https://docs.python.org/3/whatsnew/3.8.html#assignment-expressions
while (block := f.read(256)) != '':
    process(block)
for (int i : mynumber_list)
Iterator it  = mynumber_list.iterator()
while (it.hasNext())