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

2024-09-29 21:51:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我对以下代码感到困惑:

定义此findmin函数以查找列表中的最小数字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

我不明白:为什么作者在第一个for循环下面设置“issmallest=True”?通常当我们想使用类似这种情况的布尔值时(例如在代码开头将布尔值赋给变量或将布尔值作为if语句条件)?谢谢!你知道吗


Tags: 函数代码intrue列表forif定义
2条回答

while的条件总是必须计算为布尔值。如果计算结果为true,则循环继续,否则,将执行循环后的语句。请注意:您问题中的代码没有涉及while循环。这个代码非常糟糕,请忘记它,以及它带来的一切。要学习,请尝试以下方法:https://www.learnpython.org/。你知道吗

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

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,直到找到一个较小的元素。如果找到一个较小的值,issmallest的值将更改为False。因此,如果在与所有其他元素比较之后,issmallest仍然是真的,那么元素确实是最小的,因此是固定不变的。你知道吗

您可以简化此代码,因为一旦找到最小的元素,就无需进一步比较,即您可以离开函数。在这个算法中,不需要为最小的元素保留一个变量。相应的代码可能如下所示:

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

相关问题 更多 >

    热门问题