【问题标题】:How to use Boolean variable as the if conditon in Python如何在 Python 中使用布尔变量作为 if 条件
【发布时间】:2018-06-16 00:10:03
【问题描述】:

我对如下代码感到困惑:

定义这个 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

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

【问题讨论】:

  • 该代码很糟糕而且不起作用,我建议从更好的示例中学习。它也不包含while True:,尽管琐碎的研究会发现你,例如stackoverflow.com/questions/3754620/…
  • 你的问题没有多大意义。您应该考虑简化它,您会问很多问题并且可能会让自己感到困惑。至于1.为什么作者设置issmallest=True..这意味着假设该值始终是最小的,除非i>j

标签: python if-statement boolean


【解决方案1】:

while 的条件始终必须计算为布尔值。如果结果为真,则循环继续,否则,将执行循环之后的语句。请注意:您问题中的代码不涉及 while 循环。这段代码很糟糕,请忘记它,以及它附带的所有内容。为了学习,试试这个:https://www.learnpython.org/

【讨论】:

    【解决方案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,直到找到更小的元素。如果找到较小的值,则将 issmallest 的值更改为 False。因此,如果在与所有其他元素比较之后,issmallest 仍然为 True,则该元素确实是最小的,因此是固定的。

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

    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
    

    【讨论】:

      猜你喜欢
      • 2020-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-08
      • 2017-02-05
      • 2020-08-17
      • 1970-01-01
      • 2019-03-10
      相关资源
      最近更新 更多