问题是您需要使用数组而不是列表才能正确使用 where (另外,使用 True 和 False 而不是 1 和 0 来获取掩码来查找索引):
A = ['apple', 'orange', 'apple', 'banana']
arr_mask = np.where(np.array(A) == 'apple',True,False)
arr_index = np.arange(0, len(A))[arr_mask]
这样,您将获得 arr_index 为: np.array([0,2])
请注意,要使用掩码 arr_mask 或索引 arr_index 来查找 A 中的值,A 需要是一个数组:
In [55]: A = ['apple', 'orange', 'apple', 'banana']
...: arr_mask = np.where(np.array(A) == 'apple',True,False)
...: arr_index = np.arange(0, len(A))[arr_mask]
In [56]: A[arr_mask]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-56-f8b153319425> in <module>
----> 1 A[arr_mask]
TypeError: only integer scalar arrays can be converted to a scalar index
In [57]: A[arr_index]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-57-91c260fe71ab> in <module>
----> 1 A[arr_index]
TypeError: only integer scalar arrays can be converted to a scalar index
In [58]: B = np.array(A)
In [59]: B[arr_mask]
Out[59]: array(['apple', 'apple'], dtype='<U6')
In [60]: B[arr_index]
Out[60]: array(['apple', 'apple'], dtype='<U6')
您仅使用列表得到的是函数 np.where() 找不到满足条件的任何地方。如果你试试:
A = ['apple', 'orange', 'apple', 'banana']
arr_index = np.where(A == 'orange',1,0)
您将再次获得 array(0) 作为输出。