在Python中,如何找到数组B中不在数组A中的元素?

问题描述 投票:0回答:5

我正在尝试找出两个数组之间的差异

arrayA = np.array(['A1', 'A2', 'A3'])
arrayB = np.array(['A1', 'A2', 'A3', 'A4', 'A5', 'A6'])

我正在努力获得

difference = ['A4', 'A5', 'A6']

我该怎么做? 谢谢。

python python-3.x
5个回答
5
投票

使用numpy的setdiff

np.setdiff1d(arrayA, arrayB)

另外 - 是否有任何特殊原因需要成为 numpy 数组?您可以简单地使用集合,然后使用减号运算符:

set(arrayA) - set(arrayB)


1
投票
[i for i in arrayB if i not in arrayA]

1
投票

您可以使用 python set 功能来实现此目的:

import numpy as np
a = np.array(['A1', 'A2', 'A3'])
b = np.array(['A1', 'A2', 'A3', 'A4', 'A5', 'A6'])
print(set(b)-set(a))

输出:

{'A6', 'A5', 'A4'}

或者只是理解:

import numpy as np
a = np.array(['A1', 'A2', 'A3'])
b = np.array(['A1', 'A2', 'A3', 'A4', 'A5', 'A6'])
print([i for i in b if i not in a])

输出:

['A4', 'A5', 'A6']

1
投票

正如this很好的答案所指出的,您可以使用

np.setdiff1d()
方法:

import numpy as np

arrayA = np.array(['A1', 'A2', 'A3'])
arrayB = np.array(['A1', 'A2', 'A3', 'A4', 'A5', 'A6'])

print(np.setdiff1d(arrayB, arrayA))

输出

['A4' 'A5' 'A6']

但是元素的顺序不会保留,因为结果将始终按升序排序。观察:

import numpy as np


arrayA = np.array(['A1', 'A2', 'A3'])
arrayB = np.array(['A1', 'A2', 'A3', 'A4', 'A6', 'A5']) # Swapped 5 and 6

print(np.setdiff1d(arrayB, arrayA))

输出:

['A4' 'A5' 'A6']

如果想保留订单,可以使用

np.in1d()
方法:

import numpy as np

arrayA = np.array(['A1', 'A2', 'A3'])
arrayB = np.array(['A1', 'A2', 'A3', 'A4', 'A6', 'A5']) # Swapped 5 and 6

print(arrayB[~np.in1d(arrayB, arrayA)])

输出:

['A4' 'A6' 'A5']

0
投票

您可以使用套装:

difference = list(set(arrayB) - set(arrayA))

输出:

['A4', 'A6', 'A5']
© www.soinside.com 2019 - 2024. All rights reserved.