IndexError:列出索引超出范围,如果

时间:2019-02-20 15:59:47

标签: python for-loop if-statement index-error

我是Python的新手。我在R中有一些代码正在尝试用Python重写,但遇到了一个我似乎找不到答案的问题-如果已经回答或答案很明显,我很抱歉,我已经搜索过并且无法解决我的问题。

我有一个列表“高度”,它是电子表格中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 :(得分:1)

请勿在列表中建立索引(如果不需要的话)-遍历其值。

检查您的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]