首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >IndexError:范围内的预期dim 0索引[1,3)

IndexError:范围内的预期dim 0索引[1,3)
EN

Stack Overflow用户
提问于 2018-11-26 05:29:36
回答 1查看 121关注 0票数 0

在Python中,我遇到了奇怪的错误,a = [x[1], x[2]]在哪里工作,但是a = x[1:]没有。

代码语言:javascript
运行
复制
>>> 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)

请帮帮忙。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-26 06:22:43

Python中的对象不会因为支持索引而自动支持片表示法。必须编进程序。但是,可能有比使用的语法更方便的语法。

如果它是可迭代的,您可以先转换为一个列表,然后将其切片,如下

代码语言:javascript
运行
复制
a = [*x][1:]

对于特别大的迭代(这里似乎不是这样),这可能是低效的。在这种情况下,在您将其解压缩到列表之前,先对其进行islice

代码语言:javascript
运行
复制
from itertools import islice
a = [*islice(x, 1, None)]

但是对象并不仅仅因为支持索引而自动支持迭代。如果是这样的话,您仍然可以使用range()和一个理解来手动迭代,

代码语言:javascript
运行
复制
a = [x[i] for i in range(1, len(x))]

虽然这并不是真的更短,除非你有更多的元素需要处理。如果您非常需要这个模式,您可以将其抽象为一个函数。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53475198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档