【问题标题】:When I try to run my code, I seem to run with an IndexError当我尝试运行我的代码时,我似乎在运行 IndexError
【发布时间】:2018-05-05 19:43:46
【问题描述】:

当我尝试运行我的代码时,我似乎遇到了 IndexError。

def _init_trellis(self, observed, forward=True, init_func=identity):
    trellis = [ [None for j in range(len(observed))]
                      for i in range(len(self.real_states) + 1) ]

    if forward:
        v = lambda s: self.transition(0, s) * self.emission(s, observed[1])
    else: 
        v = lambda s: self.transition(s, self.end_state)

    init_pos = 1  if forward else -1   

    for state in self.state_nums():
        trellis[state][init_pos] = init_func( v(state) )
    return trellis

错误: v = lambda s: self.transition(0, s) * self.emission(s,observed[1]) IndexError: list index out of range

【问题讨论】:

  • 在出现此错误时提供参数的实际值会有所帮助。

标签: python-3.x data-mining unsupervised-learning


【解决方案1】:

在您的代码中添加断言。

assert(len(observed) > 1)

将确保数组足够长。

【讨论】:

    【解决方案2】:

    更新: 当您尝试访问具有索引的列表时会发生这种情况,但该列表没有那么多要显示的元素。
    例如:

    a_list = ['a', 'b', 'c']
    print(a_list[0]  # Prints a.
    print(a_list[2]  # Prints c.
    print(a_list[3]  # Gives IndexError. 
    '''Index of 3 means the 4th element of the list is being accessed.  
       Since the list only has 3 elements, it gives an index error.'''
    

    在这种情况下,observed[1] 给出索引错误意味着 observed 只有 1 个元素。
    也就是说,len(observed) 是 1。


    原答案:
    根据错误,确保observed 是一个最小长度为2 的可迭代对象。

    【讨论】:

      猜你喜欢
      • 2020-10-12
      • 1970-01-01
      • 1970-01-01
      • 2023-02-06
      • 2021-03-17
      • 1970-01-01
      • 2019-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多