【问题标题】:How to remove repetition when there is a common condition [duplicate]有共同条件时如何消除重复[重复]
【发布时间】:2021-12-21 09:14:30
【问题描述】:

如何删除重复项

 if a < 2 or b < 2 or c < 2 or d < 2: 
       pass #logic

我想删除重复。像这样的:

if (a,b,c,d) < 2:
   pass #logic 

【问题讨论】:

  • 您可能想要使用列表或字典而不是变量序列。这将允许您使用循环和推导。

标签: python if-statement


【解决方案1】:

另一种稍微不同的方法是检查最小变量是否小于目标值。换句话说,如果最小变量 小于目标 - 那么肯定没有一个是:

if min(a, b, c, d) < 2:
    # do something

然而,这实际上需要在幕后找到最小值,并且失去了将 any 与生成器表达式一起使用的短路优势。

【讨论】:

    【解决方案2】:

    我不会像其他答案所建议的那样仅仅为此导入numpy。这可能是矫枉过正。

    我会这样做:

    condition = lambda x: x < 2
    if any(condition(x) for x in (a, b, c, d)):
        # whatever you want
    

    或者更紧凑(但可重用性更低):

    if any(x < 2 for x in (a, b, c, d)):
        # whatever you want
    

    【讨论】:

      【解决方案3】:

      使用 numpy 时,可以使用 .all() 和 .any() 来完成:

      import numpy as np
      
      array = np.asarray([1,2,3])
      
      if (array < 2).any():
          print('True')
      else:
          print('False')
      
      #output: True
      
      if (array < 2).all():
          print('True')
      else:
          print('False')
      
      #output: False
      
      

      【讨论】:

        【解决方案4】:

        除了其他答案,使用generator expression减少计算时间

        if True in (i < 2 for i in [a,b,c,d]):
           pass #logic
        

        【讨论】:

        • 这行得通,但any(...)True in (...) 更惯用。
        【解决方案5】:

        我会在这里使用 Numpy 和 any 的组合。

        例如:

        a, b, c, d = 10, 10, 10, 10
        

        将其转换为 numpy 数组:

        import numpy as np
        
        arr = np.array([a, b, c, d])
        

        现在你可以这样做了:

        if any(arr < 2):
            pass #logic
        

        【讨论】:

          【解决方案6】:

          使用内置any函数:

          if any(map(lambda x: x < 2, (a, b, c, d))):
              pass  # whatever here
          

          【讨论】:

          • 您也可以使用filterlen(filter(lambda x: x&gt;=2, (a, b, c, d))) == 0
          • @cup11 这种方式检查 all 数字是否小于 2. 问题要求 any。也许len(filter(lambda x: x&lt;2, (a, b, c, d))) != 0 会起作用,但似乎是不必要的复杂化
          • @Tomerikoo 你是对的。我没注意到。
          猜你喜欢
          • 2010-12-29
          • 2018-06-15
          • 2021-12-14
          • 2018-03-07
          • 2018-09-24
          • 1970-01-01
          • 1970-01-01
          • 2011-11-29
          • 1970-01-01
          相关资源
          最近更新 更多