【问题标题】:Check whether a condition is True for any element of a list (OR operation) [duplicate]检查列表中任何元素的条件是否为真(或运算)[重复]
【发布时间】:2019-11-04 20:12:37
【问题描述】:

列表推导[j-x[i]==0 for i,j in enumerate(x[1:])] 将生成一个布尔元素列表。返回值必须是布尔标量而不是列表。它是通过对所有元素进行 OR-ing 获得的。该怎么做?

def has_same_adjecent(x):
    if len(x)<2:
        return False
    return [j-x[i]==0 for i,j in enumerate(x[1:])]

has_same_adjecent([3,1,3,3])# must return True

【问题讨论】:

    标签: python list


    【解决方案1】:

    您可以使用any(短路)来做到这一点。作为一项额外的优化,您可以压缩您的列表,并将其自身移动 1,然后进行比较。

    def has_same_adjecent(data):
         return any(x == y for x, y in zip(data, data[1:]))
    
    has_same_adjecent([3, 1, 3, 3])
    # True
    

    【讨论】:

      【解决方案2】:

      你也可以使用numpy的any

      np.any(~np.diff(a).astype(bool))
      

      在代码中

      import numpy as np
      
      a = [3,1,3,3]
      print(np.any(~np.diff(a).astype(bool)))
      
      # True
      

      【讨论】:

      • Numpy 是一个很棒的模块,但是对于像这样的简单操作来说有点矫枉过正。
      • @cs95,完全同意。对 OP 的说明:这仅适用于具有数值的列表。
      猜你喜欢
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-02
      • 1970-01-01
      • 2010-11-23
      • 1970-01-01
      • 2015-10-06
      • 2019-02-11
      相关资源
      最近更新 更多