您已經標記了這個作爲numpy
,並描述shape
(不len
)。這導致我認爲你有一個numpy數組。
In [665]: x=np.random.rand(10)
In [666]: x
Out[666]:
array([ 0.6708692 , 0.2856505 , 0.19186508, 0.59411697, 0.1188686 ,
0.54921919, 0.77402055, 0.12569494, 0.08807101, 0.11623299])
In [667]: x>.5
Out[667]: array([ True, False, False, True, False, True, True, False, False, False], dtype=bool)
In [668]: list(x).index(.6708692)
ValueError: 0.6708692 is not in list
的原因ValueError
是,你正在尋找一個浮動,而那些經常不完全匹配。如果數組是整數,那麼這樣的索引就可以工作。
In [669]: list(np.arange(10)).index(5)
Out[669]: 5
此推理適用x
是否是一個數組或列表。
numpy
具有where
返回布爾真值的指數中的陣列
In [670]: np.where(x>.5)
Out[670]: (array([0, 3, 5, 6], dtype=int32),)
x>.5
是如上所示的布爾數組,和[0,3,5,6]
索引值,其中這是真的。
In [671]: x[np.where(x>.5)]
Out[671]: array([ 0.6708692 , 0.59411697, 0.54921919, 0.77402055])
的平等測試不起作用任何更好
In [672]: x[np.where(x==0.6708692)]
Out[672]: array([], dtype=float64)
對於花車有一種close
概念 - 不同的是一定誤差內(np.allclose
是特別有用):
In [679]: np.where(np.isclose(x,0.59411697))
Out[679]: (array([3], dtype=int32),)
對於列表,枚舉解決方案之一是偉大的,也適用於1D數組。但它已經是一個陣列,使用where
。