我正在寻找一种快速方法,以先到先得的方式删除2D数组中存在的重复值。我知道如果它们相同则删除行的方法,但如果只存在其中一个值则不知道。
a = array([[0, 1],
[3, 4],
[3, 5],
[2, 5],
[1, 2]])
由于[1]和[2]中存在3,我想删除任何未来出现的值。类似于[3]和[4]中的2,所以输出将是:
a = array([[0, 1],
[3, 4],
[2, 5]])
可以看出,与值5重叠。任何建议都表示赞赏。
答案 0 :(得分:2)
纯Python的方式是使用set with list-comprehension:
>>> seen = set()
>>> np.array([x for x in a if seen.isdisjoint(x) and not seen.update(x)])
array([[0, 1],
[3, 4],
[2, 5]])
单行仅仅滥用set.update
返回None
的事实,因此当seen.isdisjoint(x)
为True
时,我们可以使用{{{}更新seen
集1}}。
我们也可以将上面的代码写成:
not seen.update(x)