where を適切に使用するには、リストの代わりに配列を使用する必要があります (また、1 と 0 の代わりに True と False を使用して、マスクを取得してインデックスを検索します)。
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) が得られます。