我有一個數字,我切片列表,使得(使用例如數據):if語句,而切片
midpoint = [[0.2], [0.5], [0.6]]
Values = [[0.1, 0.3, 0.6, 0.8], [0.2,0.3,0.5,0.7], [0.2,0.5,0.6,0.9]]
numbers = numpy.arange(0, len(Values), 1)
我然後有一個循環,發現從所述第一值的numbers
索引位置即大於或小於midpoint
的值。我有:
for i in range(len(Values)):
indexgtr = numbers[Values[i]>=midpoint[i]][-1] # The position of the first number larger than the midpoint
indexlt = numbers[Values[i]<=midpoint[i]][0] # The position of the first number larger than the midpoint
然後,我使用這些索引位置從我有一些其他列表返回值。
我的問題是,有時候沒有價值已超過中點所以indexgtr
或大或小或indexlt
返回一個空列表[]
和我得到的錯誤IndexError: index 0 is out of bounds for axis 0 with size 0
。
有什麼我可以補充說,將抓住這一點,並將值0替換爲空列表?
我獲得的錯誤與您的錯誤不同,並且我獲得的運行代碼的錯誤與我的預期相同。首先,表達式'Values [i]> = midpoint [i]'將list與一個標量值進行比較,在Python 2中,這隻返回一個布爾值(Python 3給出了無法定義的類型錯誤)。所以如果它是'True',你正在訪問'numbers [1]',如果它'False'正在訪問'numbers [0]',並且*然後*試圖進一步訪問'numbers [1] [ - 1 ]'或'numbers [0] [ - 1]',這會給出一個錯誤,因爲'numbers [i]'是一個不能爲每個'i'索引的標量。 – ely
上面的數據僅僅是一個例子,因爲我的真實數據非常大且更復雜。我明白它會返回一個布爾值,但它不僅僅是'False'的True,而是更多的[[True,True,True,False,False,False],具體取決於列表的長度。然後這會適當地分割'numbers'並根據需要將索引位置'[0]'或'[-1]'交給我,除非我錯了? –