2

在括号内,python 的切片速记自动生成切片对象的元组:

class Foo(object):
    def __getitem__(self, key):
        print key

Foo()[1::, 2:20:5]

这打印(slice(1, None, None), slice(2, 20, 5))。然而,据我所知,这个速记在括号外不起作用。

有没有办法在其他情况下使用切片速记?我可以定义一个虚拟对象,它只返回传递给它的任何内容__getitem__——这至少会给我一种使用速记语法生成切片元组的方法。有没有更蟒蛇的方式?

4

2 回答 2

3

NumPy 有一个s_对象可以为您执行此操作:

>>> np.s_[2::2]
slice(2, None, 2)

您可以轻松地制作自己的版本,只需设置s_ = Foo()s_在您想轻松创建切片时使用。

于 2012-08-16T08:49:51.397 回答
2

你看到的打印出来的实际上是一个很好的线索。您可以通过 slice() 全局函数直接创建切片对象。然后可以将这些传递用于从列表中索引。

s = slice(1, 10, 2)
numbers = list(range(20))
print numbers[s]
print numbers[1:10:2]

这将打印两次相同的结果 [1, 3, 5, 7, 9]。

切片实例有一些属性和方法。您可以查看帮助(切片)以了解更多信息。

于 2012-08-16T04:13:44.570 回答