在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)请帮帮忙。
发布于 2018-11-26 06:22:43
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。
https://stackoverflow.com/questions/53475198
复制相似问题