IndexError:预期范围为[1,3)的暗淡0索引Python错误

时间:2018-11-26 05:29:37

标签: python python-3.x

在Python中,我遇到一个奇怪的错误,a = [x[1], x[2]]可以在其中工作,而a = x[1:]却不能。

>>> out                                                                    
farray([Y[0], Y[1], Y[2]])                                                        
>>> out[1]
Y[1]
>>> remaining_out = [out[1], out[2]]
>>> remaining_out[0]
Y[1]
>>> remaining_out = out[1:]
>>> remaining_out[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module> 
File "/home/kmshah4/.local/lib/python3.6/site-packages/pyeda/boolalg/bfarray.py", line 485, in __getitem__
nsls = self._norm_slices(fsls)                                                                                                                                        File "/home/kmshah4/.local/lib/python3.6/site-packages/pyeda/boolalg/bfarray.py", line 890, in _norm_slices                             nsls.append(_norm_index(i, fsl, *self.shape[i]))
File "/home/kmshah4/.local/lib/python3.6/site-packages/pyeda/boolalg/bfarray.py", line 1127, in _norm_index
raise IndexError(fstr.format(dim, start, stop))
IndexError: expected dim 0 index in range [1, 3)

请帮助。

1 个答案:

答案 0 :(得分:0)

Python中的对象不仅仅因为它们支持索引就自动支持切片符号。必须对此进行编程。语法可能比您正在使用的语法更方便。

如果它是可迭代的,则可以先转换为列表,然后将其切成薄片,例如

a = [*x][1:]

对于特别大的可迭代对象(这里似乎不是这种情况),这可能效率不高。在这种情况下,请islice 之前将其解压缩到列表中。

from itertools import islice
a = [*islice(x, 1, None)]

但是对象并不仅仅因为它们支持索引而自动支持迭代。在这种情况下,您仍然可以使用range()和理解力手动进行迭代,

a = [x[i] for i in range(1, len(x))]

尽管直到您还有其他一些要处理的内容时,这实际上并没有那么短。如果您非常需要这种模式,可以将其抽象为一个函数。

最后,对象不一定仅支持len,因为它们支持索引。如果您事先不知道长度,那么您所能做的就是遍历并抓住LookupError