当我尝试运行我的代码时,我似乎运行了一个IndexError

时间:2017-11-22 06:48:59

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

当我尝试运行我的代码时,我似乎运行了一个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:列表索引超出范围

2 个答案:

答案 0 :(得分:0)

更新: 当您尝试访问带有索引的列表时会发生这种情况,但列表中没有要显示的元素数量 例如:

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.'''

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

原答案:
根据错误,确保observe是一个迭代,最小长度为2.

答案 1 :(得分:0)

在代码中添加断言。

assert(len(observed) > 1)

将确保数组足够长。