Python 类的方法中的索引超出范围
我在使用Python,我在一段代码中遇到了一个问题,其中包括设置一些运算符,你可以看到下面的代码,我在类的一个方法中遇到了一个问题,正如你在代码中看到的那样,Python 类的方法中的索引超出范围,python,python-3.x,Python,Python 3.x,我在使用Python,我在一段代码中遇到了一个问题,其中包括设置一些运算符,你可以看到下面的代码,我在类的一个方法中遇到了一个问题,正如你在代码中看到的那样,qrelay,我在这一部分中得到了一个错误,对于范围(0,n-1)内的i: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+
qrelay
,我在这一部分中得到了一个错误,对于范围(0,n-1)内的i: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)
,您可以在下面的代码列表中正确地看到它。我不知道为什么,但我得到了一个索引器:列表索引超出了范围
,尽管我觉得一切都很好
将numpy导入为np
从sympy进口*
类别Qrely:
定义(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变速器(自身、op、a、b、ap、bp、b):
p=B*[ap,bp]
op=op.subs(a,p[0])
op=op.subs(b,p[1])
返回操作
def旋转矩阵(自,θ):
c=np.cos(θ)
s=np.sin(θ)
返回np.矩阵([[c,s],-s,c]])
def qrelay_op(自身、n、φ、α、δ):
self.ah=[范围(1,n)中i的符号('a_H1{:d}'。格式(i))]
self.bh=[范围(1,n)中i的符号('b_H1{:d}'。格式(i))]
self.av=[范围(1,n)中i的符号('a_V1{:d}'。格式(i))]
self.bv=[范围(1,n)中i的符号('b_V1{:d}'。格式(i))]
打印(self.ah、self.bh、self.av、self.bv)
打印(self.ah[1])
op=0
对于范围(0,n-1)内的i:
op+=phi[i]*(self.ah[i]*self.bh[i]+self.av[i]*self.bv[i])
B=1/sqrt(2)*np.数组([[1,1],-1,1]]
self.aph=[范围(1,n)中i的符号(“a''u H1{:d}”.format(i))]
self.bph=[范围(1,n)中i的符号(“b''u H1{:d}”.format(i))]
self.apv=[范围(1,n)中i的符号(“a''u V1{:d}”.format(i))]
self.bpv=[范围(1,n)中i的符号(“b''u V1{:d}”.format(i))]
打印(self.aph、self.bph、self.apv、self.bpv)
对于范围(0,n-1)内的i:
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.alpha)
op=自转换(op,自bh[n-1],自bv[n-1],自bph[n-1],自bpv[n-1],自旋转矩阵(δ))
syms=Qrely(self.ah、self.bh、self.av、self.bv、self.aph、self.apv、self.bpv)
返回符号,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)
因为self.aph
和self.bph
总是相同的长度,当你尝试做self.bph[i],self.aph[i+1]
您正在访问self.bph
列表中的最后一项,并试图访问超过self.aph中最后一项的项目
请将问题从Radin GeekGaming正确地重新格式化:如果您在开始的某个地方陈述您的编程语言会更好。但是在底部,我可以看到标签或者你的兴趣(我不确定是哪一个)在说Python。但是我必须这样做,因为在这一行中,op=self.trans(op,self.bh[I],self.ah[I+1],self.bph[I],self.aph[I+1],B)
我正在调用trans方法,它将在本例中被替换为self.bh[I]
将被self.bph[i]
和self.ah[i+1]
替换为self.aph[i+1]
但self.aph[i+1]
不存在。