首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在__getitem__中实现切片

在__getitem__中实现切片
EN

Stack Overflow用户
提问于 2010-05-30 06:52:28
回答 4查看 78.9K关注 0票数 130

我正在尝试为我创建的一个创建向量表示的类实现切片功能。

到目前为止,我已经有了这段代码,我相信它可以正确地实现切片,但是每当我调用v[4] (其中v是一个向量python )时,都会返回一个关于没有足够参数的错误。因此,我正在尝试弄清楚如何在我的类中定义getitem特殊方法来处理普通索引和切片。

代码语言:javascript
复制
def __getitem__(self, start, stop, step):
    index = start
    if stop == None:
        end = start + 1
    else:
        end = stop
    if step == None:
        stride = 1
    else:
        stride = step
    return self.__data[index:end:stride]
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-05-30 06:56:40

在对对象进行切片时,__getitem__()方法将接收slice对象。只需查看slice对象的startstopstep成员,即可获得切片的组件。

代码语言:javascript
复制
>>> class C(object):
...   def __getitem__(self, val):
...     print val
... 
>>> c = C()
>>> c[3]
3
>>> c[3:4]
slice(3, 4, None)
>>> c[3:4:-2]
slice(3, 4, -2)
>>> c[():1j:'a']
slice((), 1j, 'a')
票数 135
EN

Stack Overflow用户

发布于 2012-03-31 07:43:03

我有一个“合成”列表(其中的数据比你想要在内存中创建的要大),我的__getitem__看起来像这样:

代码语言:javascript
复制
def __getitem__( self, key ) :
    if isinstance( key, slice ) :
        #Get the start, stop, and step from the slice
        return [self[ii] for ii in xrange(*key.indices(len(self)))]
    elif isinstance( key, int ) :
        if key < 0 : #Handle negative indices
            key += len( self )
        if key < 0 or key >= len( self ) :
            raise IndexError, "The index (%d) is out of range."%key
        return self.getData(key) #Get the data from elsewhere
    else:
        raise TypeError, "Invalid argument type."

切片不会返回相同的类型,这是一个禁忌,但它对我来说是有效的。

票数 73
EN

Stack Overflow用户

发布于 2010-05-30 06:58:10

正确的方法是让__getitem__接受一个参数,这个参数可以是一个数字,也可以是一个切片对象。

请参见:

http://docs.python.org/library/functions.html#slice

http://docs.python.org/reference/datamodel.html#object.__getitem__

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

https://stackoverflow.com/questions/2936863

复制
相关文章

相似问题

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