【问题标题】:Why control is going inside if condition while the condition is false如果条件为假,为什么控制进入内部
【发布时间】:2020-09-28 01:46:15
【问题描述】:

查找最小消除数以使所有相邻元素之和为偶数的函数:

def min_elimination(n, arr): 
    countOdd = 0

    # Stores the new value 
    for i in range(n): 

        # Count odd numbers 
       ***if (arr[i] % 2): 
              countOdd += 1***

    # Return the minimum of even and 
    # odd count 
    return min(countOdd, n - countOdd) 

# Driver code 
if __name__ == '__main__': 
    arr = [1, 2, 3, 7, 9] 
    n = len(arr) 
    print(min_elimination(n, arr)) 

请帮助我处理if 条件。当代码执行if(number%2) 时,控制将进入if 内部,因为列表的第一个元素是奇数。 if(number%2) 和 if(number%2==0) 之间有什么区别吗?因为当我尝试if(number%2==0) 时,控件没有进入if,因为数字是奇数(检查列表的第一个元素)。

【问题讨论】:

    标签: python list loops if-statement conditional-statements


    【解决方案1】:

    这是上面的一个简单版本。

    def min_elimination(arr):
        lst1 = [n for n in arr if n%2] # List of all odd numbers
        lst2 = [n for n in arr if not n%2] # List of all even numbers
        lst = max(lst1, lst2, key=lambda x: len(x))
        return lst
    print(min_elimination([1, 2, 3, 7, 9]))
    

    【讨论】:

    • 这不会做 OP 描述的事情,也不会回答所提出的问题。
    【解决方案2】:

    我相信您的代码可以按原样正常工作。它正确返回获得结果所需的最小消除次数,而不是结果本身。

    if(number%2) 和 if(number%2==0) 有什么区别

    是的,if number % 2if number % 2 == 1 相同,与 if number % 2 == 0 相反。因此,将一个切换为另一个会破坏程序的逻辑。

    我可能会简化你的代码如下:

    def min_elimination(array): 
        odd = 0
    
        # Stores the new value 
        for number in array: 
    
            # Count odd numbers 
            odd += number % 2
    
        return min(odd, len(array) - odd) 
    

    min_elimination([1, 2, 3, 7, 9]) 返回1 的情况下,需要一 (1) 次消除才能使所有相邻元素的总和相等。

    【讨论】:

      【解决方案3】:

      两个整数加起来是偶数的唯一方法是两个整数都应该是奇数,或者两个整数都应该是偶数。

      所以你的问题基本上是想找出数组中是否有更多的奇数,还是偶数:

      def min_elimination(arr):
          return len(min([n for n in arr if n%2],[n for n in arr if not n%2],key=len))
      
      print(min_elimination([1, 2, 3, 7, 9]))
      

      输出:

      1
      

      【讨论】:

      • 您的答案看起来不错。只是一个疑问,可能它缺少关键字“相邻元素”。在您的解决方案中,1、3、7、9 并不都是相邻的,因为在 1 和 3 之间有一个元素 2!我说的对吗?
      • @Ketan 你说的有道理,但是帖子并没有具体说明淘汰后,我们应该在与被淘汰者相邻的两个数字之间留一个空隙。
      • 有点像remove()的方法,从列表中删除一个元素后,间隙被周围的元素封闭。我说的对吗?
      • @Ann Zen。是的,使用 remove 后,间隙会自动关闭。因此即使在删除元素后它们也会变得相邻。
      【解决方案4】:

      你可以使用numpy来比较数组中奇数的个数和数组中偶数的个数:

      import numpy as np
      
      def min_elimination(arr):
          return len(min(arr[arr%2],arr[any(arr%2)],key=len))
      
      print(min_elimination(np.array([1, 2, 3, 7, 9])))
      

      输出:

      1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-10
        • 2017-03-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多