【问题标题】:IndexOutOfRange error when filling a List Python填充列表 Python 时出现 IndexOutOfRange 错误
【发布时间】:2018-12-10 12:44:10
【问题描述】:

假设 Seq1 = "ACACT" Seq2 = "AAT" 为什么这段代码输出 indexOutOfRange

    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

【问题讨论】:

    标签: python python-3.x list loops


    【解决方案1】:

    因为外部列表推导决定了行数,等于len(s2)

    M  = [[0 for x in range(s1)] for y in range(s2)]
    

    然而,当您分配时,您使用range(s1) 进行行索引:

    for i in range(s1):
        for j in range(s2):
            if ....:
                M[i][j] = ...
    

    所以要么颠倒M 的构造顺序,要么颠倒分配给M[j][i] 的顺序。

    【讨论】:

      【解决方案2】:

      只是因为你的第二个单词比第一个单词有更多的字母。

      也许你应该这样做:

      # 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)]
      

      或者你应该在循环之前检查单词的长度。

      【讨论】:

        猜你喜欢
        • 2018-12-31
        • 1970-01-01
        • 2018-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-11
        • 1970-01-01
        相关资源
        最近更新 更多