我有一个值数组,我想找到它在另一个值数组中的位置。例如,如果我有:
array1 = [1,2,3,4,5,6]
array2 = [2,6,3,4,1,5,.....]
我想找到数组1中每个元素在数组2中的位置,所以我希望它返回类似的内容
what_position = [4,0,2,3,5,1]
我尝试过这样的事情:
for i in range(len(array1)):
what_position = array1[i].index(array[2])
但是我得到一个错误提示
'numpy.float64' object has no attribute 'index'
我想这意味着我不能在浮点数上使用.index。还有另一种方法可以解决这个问题。
答案 0 :(得分:2)
np.intersect1d
提供了另一种解决方案:
import numpy as np
array1 = [1,2,3,4,5,6]
array2 = [2,6,3,4,1,5]
np.intersect1d(array1, array2, return_indices=True)[2]
答案 1 :(得分:1)
列表理解有助于:
positions = [array2.index(item) for item in array1]
一个for循环,结果相同:
positions = []
for item in array1:
positions.append(array2.index(item))
换句话说,您在列表而不是单个项目上调用index()
。
答案 2 :(得分:1)
如果array2
中没有重复的元素,则可以使用以下解决方案。它应该比使用index()
进行列表理解要快:
from operator import itemgetter
from itertools import count
array1 = [1, 2, 3, 4, 5, 6]
array2 = [2, 6, 3, 4, 1, 5, 7, 8]
itemgetter(*array1)(dict(zip(array2, count())))
# [4, 0, 2, 3, 5, 1]