IndexError:范围[1,3]中应为dim 0索引错误

2024-09-30 04:34:03 发布

您现在位置:Python中文网/ 问答频道 /正文

在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)

请帮忙。你知道吗


Tags: innormhomelibpackageslocallinesite
1条回答
网友
1楼 · 发布于 2024-09-30 04:34:03

Python中的对象不自动支持切片表示法,因为它们支持索引。必须编程。不过,可能有比您使用的语法更方便的语法。你知道吗

如果它是iterable,你可以先把它转换成一个列表,然后把它切片,就像

a = [*x][1:]

对于特别大的iterables(这里似乎不是这样),这可能是低效的。在这种情况下,islice在解包到列表之前,它是。你知道吗

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

但是对象不会自动支持迭代,因为它们也支持索引。如果是这样的话,你仍然可以用range()和理解手动迭代

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

不过,在你有更多的元素需要处理之前,这个时间并不短。如果你非常需要这个模式,你可以把它抽象成一个函数。你知道吗

最后,对象不一定支持len,因为它们支持索引。如果您事先不知道长度,那么您所能做的就是在该点循环并捕捉LookupError。你知道吗

相关问题 更多 >

    热门问题