检查列表的任何元素的条件是否为True(或操作)

时间:2019-06-22 04:16:05

标签: python list

列表理解[j-x[i]==0 for i,j in enumerate(x[1:])]将产生一个布尔元素列表。返回值必须是布尔型标量,而不是列表。它是通过对所有元素进行“或”运算获得的。怎么做?

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

您还可以使用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