首页 > 解决方案 > 类方法中的索引超出范围

问题描述

我正在使用 Python,我在一个包含设置一些运算符的代码中遇到问题,您可以看到下面的代码,我在该类的一种方法中遇到问题,qrelay正如您在代码中看到的那样,并且我在这部分遇到了一个错误for i in range(0,n-1):op = self.trans(op, self.bh[i], self.ah[i+1], self.bph[i], self.aph[i+1], B) op = self.trans(op, self.bv[i], self.av[i+1], self.bpv[i], self.apv[i+1], B),你可以在下面的代码中正确地看到它。我不知道为什么,但我得到了一个IndexError: list index out of range即使在我看来一切都很好

import numpy as np
from sympy import *


class Qrely:
    def __init__(self,ah=(),bh=(),av=(),bv=(),aph=(),bph=(), apv=(),bpv=()):
        self.ah=ah
        self.bh=bh
        self.av=av
        self.bv=bv
        self.aph=aph
        self.bph=bph
        self.apv=apv
        self.apv=bpv


    def trans(self, op, a, b, ap, bp, B):
        p =B * [ap, bp]
        op = op.subs(a, p[0])
        op = op.subs(b, p[1])
        return op

    def rotatmatrix(self, theta):
        c = np.cos(theta)
        s = np.sin(theta)

        return np.matrix([[c, s], [-s, c]])

    def qrelay_op(self,n, phi, alpha, delta):
        self.ah = [symbols('a_H1{:d}'.format(i)) for i in range(1,n)]
        self.bh = [symbols('b_H1{:d}'.format(i)) for i in range(1,n)]
        self.av = [symbols('a_V1{:d}'.format(i)) for i in range(1,n)]
        self.bv = [symbols('b_V1{:d}'.format(i)) for i in range(1,n)]

        print(self.ah, self.bh, self.av, self.bv)
        print(self.ah[1])
        op = 0

        for i in range(0,n-1):
            op += phi[i] * (self.ah[i]*self.bh[i] + self.av[i]*self.bv[i])

        B = 1/sqrt(2)*np.array([[1, 1],[-1, 1]])

        self.aph = [symbols("a'_H1{:d}".format(i)) for i in range(1,n)]
        self.bph = [symbols("b'_H1{:d}".format(i)) for i in range(1,n)]
        self.apv = [symbols("a'_V1{:d}".format(i)) for i in range(1,n)]
        self.bpv = [symbols("b'_V1{:d}".format(i)) for i in range(1,n)]

        print(self.aph, self.bph, self.apv, self.bpv)

        for i in range(0,n-1):
            op = self.trans(op, self.bh[i], self.ah[i+1], self.bph[i], self.aph[i+1], B)
            op = self.trans(op, self.bv[i], self.av[i+1], self.bpv[i], self.apv[i+1], B)

        op = self.trans(op, self.ah[0], self.av[0], self.aph[0], self.apv[0], self.rotatmatrix(alpha))
        op = self.trans(op, self.bh[n-1], self.bv[n-1], self.bph[n-1], self.bpv[n-1], self.rotatmatrix(delta))

        syms = Qrely(self.ah, self.bh, self.av, self.bv, self.aph, self.bph, self.apv, self.bpv)

        return syms, op

当我想通过调用类和qrelay_op键入来测试它时,A=Qrely() print(A.qrelay_op(3,np.array([10,20,10]),10,20))我收到此错误消息:

IndexError: list index out of range` and the error according to the traceback is in: 

line 58, in qrelay_op op=self.trans(op,self.bh[i],self.ah[i+1],self.bph[i],self.aph[i+1], B)

标签: pythonpython-3.x

解决方案


由于self.aphself.bph的长度始终相同,因此当您尝试self.bph[i], self.aph[i+1]访问列表中的最后一项并尝试self.bph访问.self.aph


推荐阅读