IndexError: перечислить индекс вне диапазона в случае, если - PullRequest
0 голосов
/ 20 февраля 2019

Я чрезвычайно новичок в Python.У меня есть некоторый код в R, который я пытаюсь переписать в Python, и я столкнулся с проблемой, на которую я не могу найти ответ - извинения, если на этот вопрос уже был дан ответ, или ответ очевиден, я искали не могу исправить мою проблему.

У меня есть список 'height', который представляет собой столбец из 481 числа из электронной таблицы.Я хочу использовать hrc, список от минимальных до максимальных значений высоты, такой же длины, что и список высот, но все значения расположены на одинаковом расстоянии.Для каждого значения в hrc я хочу выполнить его с помощью следующего кода, но я получаю Indexerror: список индексов выходит за пределы диапазона.

hrc = np.linspace(min(height),max(height),len(height))
Qrc = []
for i in range(0,len(hrc)): 
  if(hrc[i]<0.685): 
      Qrc.append(30.69*((hrc[i]-0.156)**1.115))
  elif(0.685<=hrc[i] and hrc[i]<1.917):
      Qrc.append(27.884*((hrc[i]-0.028)**1.462))
  elif(1.917<=hrc[i]):
      Qrc.append(30.127*((hrc[i]-0.153)**1.502))

Я ценю любую помощь!

1 Ответ

0 голосов
/ 20 февраля 2019

Не индексировать в списки (если это не нужно) - перебирать его значения.

Проверьте ваши if условия, вы можете упростить их - если подойдет более низкий диапазон, следующий диапазон не должен проверять, больше ли значение, чем нижний диапазон (если это было, выне проверял бы это сейчас):

import numpy as np
height = [i/100.0 for i in range(0,200,20)]
hrc = np.linspace(min(height),max(height),len(height))

Qrc = []
for value in hrc: 
    if value < 0.685 : 
        Qrc.append(30.69*((value-0.156)**1.115))
    elif value < 1.917 :
        Qrc.append(27.884*((value-0.028)**1.462))
    else:
        Qrc.append(30.127*((value-0.153)**1.502))

print(len(height))  # 10
print(len(hrc))     # 10

print(hrc)   
print(Qrc)   

Вывод:

[0.  0.2 0.4 0.6 0.8 1.  1.2 1.4 1.6 1.8]
[nan, 0.942858721586344, 6.367024848753282, 12.411632276269644, 
 19.100800437337597, 26.749961012743743, 35.16634580199501, 
 44.275837504844475, 54.021755132798525, 64.35896171368269]
...