为什么我得到这个Python索引错误?

2024-04-26 07:14:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我在使用代码时遇到以下索引错误。此代码是用于股票技术分析的Aroon指标。错误消息如下所示。我用的是Python27。在

回溯(最近一次呼叫): 文件“C:\Python\阿隆.py“,第46行,英寸 阿隆(20) 文件“C:\Python\阿隆.py“,第37行,在阿隆 高印刷体 索引器错误:索引106超出了大小为106的轴0的界限

示例数据可以位于http://sentdex.com/sampleData.txt我将其复制到自己的文本文件中。代码如下。它会打印数据,但随后我会收到以下错误消息,并试图找出原因。在

import numpy as np
import time

sampleData = open("sampleData.txt", "r").read()
splitData = sampleData.split("\n")

date, closep, highp, lowp, openp, volume = np.loadtxt(splitData,delimiter=",", unpack=True)


def aroon(tf):

    AroonUp = []
    AroonDown = []
    AroonDate = []

    x = tf

    while x <= len(date):
        Aroon_Up = ((highp[x-tf:x].tolist().index(max(highp[x-tf:x])))/float(tf))*100#numpy array to list.

        Aroon_Down = ((lowp[x-tf:x].tolist().index(min(lowp[x-tf:x])))/float(tf))*100#numpy array to list.

        AroonUp.append(Aroon_Up)
        AroonDown.append(Aroon_Down)
        AroonDate.append(date[x])

        x+=1

        print "######"
        print highp[x] # THIS IS LINE 37
        print Aroon_Up
        print "=="
        print lowp[x]
        print Aroon_Down
        print "#####"
    return AroonDate,AroonUp,AroonDown


aroon(20)

Tags: 代码numpydatetf错误downprintup
3条回答

Python开发人员竭尽全力确保您几乎不必手动编制索引,这正是因为它容易出错。在

如果您希望在序列中同时包含元素date(可能应该称为dates btw)和这些元素的索引,那么解决这个问题的更python方法是使用enumerate:

for x, date in enumerate(dates):
    if x < tf:
        continue
    # more code

或者正如已经建议的那样,使用范围:

^{pr2}$

我个人会用枚举法。在

另一方面,我建议使用描述性变量名,这样可以使其他人(和您自己)更容易地阅读代码。在

您应该更改以下行:

while x <= len(date):

为此:

^{pr2}$

文件中有106行,它正在查找第107行(从零开始)。在

请记住,在Python中,索引从0开始,而不是从1开始。len(date) == 106,因此最大有效索引是105,而不是106。尝试将while条件更改为

while x < len(date):

相关问题 更多 >