Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 填写列表时发生IndexOutfrange错误_Python_Python 3.x_List_Loops - Fatal编程技术网

Python 填写列表时发生IndexOutfrange错误

Python 填写列表时发生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)

假设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)] 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)]
或者你应该在循环之前检查单词的长度