python - 类方法中的索引超出范围
问题描述
我正在使用 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)
解决方案
由于self.aph
和self.bph
的长度始终相同,因此当您尝试self.bph[i], self.aph[i+1]
访问列表中的最后一项并尝试self.bph
访问.self.aph
推荐阅读
- amazon-web-services - AWS CodeBuild - 成功构建后将 yaml 文件复制到 S3
- java - 设置布局背景时,共享元素转换将无法正常工作
- html - 最大高度不会降低文本的高度
- excel - 将 ActiveX 文本框设置为空值后,先前的文本会短暂出现在框中,然后再次消失
- android - Wordpress 菜单在特定点被切断,Chrome for Android 浏览器似乎拒绝呈现它
- bash - GMT 命令行如何不能在一个目录中工作(但可以在所有其他目录中正常工作)?
- regex - 将选定的行更改为列
- javascript - Discord-api“PATCH Modify Guild Member”没有做任何改变,当我用谷歌脚本制作补丁时:“UrlFetchApp.fetch()”
- flutter - 在外部单击时如何关闭警报对话框
- c# - 当我需要进行身份验证时如何使用 httpwebrequest POST 并且在 curl 中身份验证是使用“用户名:pass@website.com”完成的?