排序集合:如何获得(扩展)切片?

Sin*_*ion 2 python

我该如何解决这个问题?

>>> class unslice:
...     def __getitem__(self, item): print type(item), ":", item
...
>>> u = unslice()
>>> u[1,2]    # using an extended slice
<type 'tuple'> : (1, 2)
>>> t = (1, 2)
>>> u[t]  # or passing a plain tuple
<type 'tuple'> : (1, 2)
Run Code Online (Sandbox Code Playgroud)

合理的:

我目前正在过度设计一个有序的关联集合,能够返回项目范围.我很可能想要在集合中存储小整数的元组(或者甚至是像Ellipsis这样的病态上更奇怪的值)(作为键),并且需要某种理智的方式来区分扩展切片与普通键

在一维情况下,这是一个非问题.我想不出任何真正的理由我想要收集类型的值slice,特别是因为xrange值在功能上类似并且更易于识别pythonistas(在我看来).所有其他扩展切片结构是元组slice,Ellipsis或纯老蟒蛇值

除了NumPy中的多维数组之外,没有其他类型的扩展切片似乎常用于任何类型的集合.

我需要支持n维轴,类似于oct-trees或GiS索引.

Bra*_*des 5

由于无法区分调用u [x,y]和u [(x,y)],因此应将要尝试定义的两个操作之一移至实际方法.你知道,有一些名为u.slice()或u.range()或u.getslice()或u.getrange()之类的东西.

实际上,在编写我自己的程序时,我通常会发现当我尝试使用两个截然不同的语义重载Python操作时,这意味着我正在做的件事都需要转换为命名方法!因为如果两者在意义上如此相似,以至于没有一个人明显优先使用大括号[] getitem快捷方式,那么如果两个操作都获得真实,可读,显式的方法名称,那么我的代码可能会更具可读性.

但是,很难说更多,因为你没有告诉我们你到底是怎么进入这个烂摊子的.为什么你想要在元组下存储东西获得各种东西?有人怀疑你开始做一些复杂的事情.:-)

哦,和其他语言有这个问题让你说[1] [2]进行多维访问,以便轻松区分[1,2].只是你知道还有另一种选择.