如何使用布尔变量作为Python中的if条件

时间:2018-01-06 09:51:12

标签: python if-statement boolean

我对代码感到困惑如下:

定义此findmin函数以查找alist中的最小数字,O(n ^ 2)

def findMin(alist):
    overallmin=alist[0] 
    for i in alist:
        issmallest=True
        for j in alist:
            if i>j:
               issmallest=False
        if issmallest:
            overallmin = i
    return overallmin

我无法理解:为什么作者设置" issmallest = True"低于第一个for循环?通常当我们想要使用类似这种情况的布尔值时(例如在代码开头将boolean值赋值给变量或将布尔值作为if语句条件)?谢谢!

2 个答案:

答案 0 :(得分:1)

好的,首先,要消除代码中的一些错误,一个有效的例子就是:

def findMin(alist):
    overallmin=alist[0] 

    for i in alist:
        issmallest=True
        for j in alist:
            if i>j:
               issmallest=False
        if issmallest:
            overallmin = i
    return overallmin

此代码背后的想法是将列表中的所有元素与所有其他元素进行比较,并保留比所有其他元素小的元素。因此,在循环中,假设当前元素是最小的issmallest = True,直到找到较小的元素。如果找到较小的值,则最小值的值将更改为False。因此,如果在与所有其他人进行比较之后,最小值仍为真,那么该元素确实是最小的,因此也是固定的。

您可以简化此代码,因为一旦找到最小元素就无需进一步比较,即您可以离开该函数。同样在该算法中,不需要为最小元素保持变量。相应的代码可能会读取如下内容:

def findMin(alist): 
    for current_el in alist:
        issmallest = True
        for other_el in alist:
            if other_el < current_el:
               issmallest = False

        if issmallest:
            return current_el

但是:即使对于初学者来说,这也不是一个找到最低要求的好代码。我可以说这是我自己的初学者。通过列表一次,使用手边的元素,比较它,并始终保持最小,这是更清洁。 因此,即使价格低廉,您也可以编写更快的算法:

def findMin(alist): 
    smallest_el = alist.pop() # take out an element, no need to compare with itself
    for other_el in alist:
        if other_el < smallest_el:
            smallest_el = other_el

    return smallest_el

答案 1 :(得分:0)

while的条件总是必须评估为布尔值。如果它的计算结果为true,则循环继续,否则循环后的语句将被执行。请注意:您的问题中的代码不涉及while循环。这段代码非常糟糕,请忘记它,以及随附的所有内容。要学习,请尝试:https://www.learnpython.org/