在两个数组中找到变化值的索引

3

我可以通过比较两个数组来找到变化的值的索引吗?

例如:

array1 = [1, 2 ,3]
array2 = [1, 2, 4]

我希望通过比较这两个数组找到变化值的索引。 对于此示例,应该是2

我正在使用numpy比较两个数组。 但我无法找到已更改值的索引。

5个回答

3
最初的回答:由于您正在使用NumPy,因此可以使用!=运算符进行比较,并使用np.flatnonzero函数进行处理:
array1 = np.array([1,2,3])
array2 = np.array([1,2,4])

res = np.flatnonzero(array1 != array2)

print(res)
# array([2], dtype=int64)

3
你可以使用numpy的where函数来实现这个功能。
array3 = np.where((array1-array2) != 0)

2
这是一个不使用numpy的解决方案。你可以使用enumerate()zip():最初的回答。
array1 = [1,2,3]
array2 = [1,2,4]

print([i for i, (x, y) in enumerate(zip(array1, array2)) if x != y])
# [2]

2
要在两个列表之间找到发生n次变化的元素的索引,我们可以使用“最初的回答”。
c = set(a) - set(b)
[a.index(i) for i in c]

这个不行。如果相同的元素可以出现两次,它可能会找到错误的索引。如果列表中有相同元素但位置不同,它也不起作用。即使它能工作,这也非常低效。每个不匹配元素都需要一个循环(index调用)。 - jpmc26

0

list(set(a1)-set(a2)) 给出了所有不在集合 a2 中的元素列表。

a1 = [1,2,3]
a2 = [1,2,4]
arr=list(set(a1)-set(a2)) #arr=[3]
print(a1.index(arr[0]))   #2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接