Python 填写列表时发生IndexOutfrange错误
假设Seq1=“ACACT”Seq2=“AAT” 为什么这段代码会输出IndexOutfrangePython 填写列表时发生IndexOutfrange错误,python,python-3.x,list,loops,Python,Python 3.x,List,Loops,假设Seq1=“ACACT”Seq2=“AAT” 为什么这段代码会输出IndexOutfrange s1 = len(self.Seq1) s2 = len(self.Seq2) self.M = [[0 for x in range(s1)] for y in range(s2)] self.Ix = [[0 for x in range(s1)] for y in range(s2)] self.Iy = [[0 for x in range(s1)
s1 = len(self.Seq1)
s2 = len(self.Seq2)
self.M = [[0 for x in range(s1)] for y in range(s2)]
self.Ix = [[0 for x in range(s1)] for y in range(s2)]
self.Iy = [[0 for x in range(s1)] for y in range(s2)]
for i in range(s1):
for j in range(s2):
if i == 0 and j != 0:
self.M[i][j]= - math.inf #Error in this line
if i != 0 and j == 0:
self.M[i][j]= - math.inf
因为外部列表理解决定了行数,它等于len(s2)
:
然而,在分配时,您使用range(s1)
进行行索引:
for i in range(s1):
for j in range(s2):
if ....:
M[i][j] = ...
因此,要么颠倒构造M
的顺序,要么颠倒赋值到M[j][i]
的顺序,因为外部列表理解决定了行数,这等于len(s2)
:
然而,在分配时,您使用range(s1)
进行行索引:
for i in range(s1):
for j in range(s2):
if ....:
M[i][j] = ...
因此,要么颠倒你对
M
的构造顺序,要么把赋值顺序颠倒到M[j][i]
这只是因为你的第二个单词比第一个单词有更多的字母
也许你应该这样做:
# before: self.M = [[0 for x in range(s1)] for y in range(s2)]
self.M = [[0 for x in range(s2)] for y in range(s1)]
或者你应该在循环之前检查单词的长度。这只是因为你的第二个单词比第一个单词有更多的字母 也许你应该这样做:
# before: self.M = [[0 for x in range(s1)] for y in range(s2)]
self.M = [[0 for x in range(s2)] for y in range(s1)]
或者你应该在循环之前检查单词的长度