两个数组之间的元素智能运算符

时间:2019-11-18 17:14:12

标签: python pandas numpy

我想知道在两个数组之间进行比较时,是否存在一种不错的,优雅的方法来逐个元素地进行计算。

arr1 = [[1, 2], 
        [3, 4], 
        [5, 6]]

àrr2 = [3,
        5, 
        6]

result = arr2 in arr1

现在我想要一个类似这样的结果:

[False, False, True]

非常感谢!

编辑:对不起,我的例子有点误导。我希望以元素为单位执行此操作,这意味着我想检查arr2 [0]是否在arr1 [0]中,arr2 [1]是否在arr2 [1]中,依此类推。等等。我更新了示例

真正的数组也要大得多,所以我想做到没有循环

6 个答案:

答案 0 :(得分:5)

您可以使用operator.contains

>>> arr1 = [[1, 2], [4, 5], [7, 8]]
>>> arr2 = [3, 4, 7]
>>> list(map(contains, arr1, arr2)
[False, True, True]

或者对于numpy使用np.isin

>>> arr1 = np.array([[1, 2], [4, 5], [7, 8]])
>>> arr2 = np.array([3, 4, 7])
>>> np.isin(arr2, arr1).any(1)
[False  True  True]

答案 1 :(得分:4)

IIUC,有很棒的np.in1d可以做到这一点:

In [16]: np.in1d(arr2, arr1)
Out[16]: array([False,  True,  True])

在文档中,此功能执行以下操作:

  

测试一维数组的每个元素是否也存在于第二个数组中。

答案 2 :(得分:1)

您可以进行print([any(x in arr2 for x in a) for a in arr1])

最诚挚的问候

答案 3 :(得分:1)

理解和zip

[a in b for a, b in zip(arr2, arr1)]

[False, False, True]

答案 4 :(得分:-1)

可以通过列表理解来完成

result = [arr2[i] in arr1[i] for i in range(len(arr1))]

那么你有

[False, True, True]

答案 5 :(得分:-1)

这是一种快速的方法:

projectDirectory
    serverFiles
        server.js
        clientFiles
            index.html
            login.html

const path = require('path');
app.use(express.static(path.join(__dirname, "clientFiles")));