可以在括号外使用python的切片符号吗?

问题描述:

在括号中,蟒蛇的切片简写自动生成切片对象的元组:可以在括号外使用python的切片符号吗?

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

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

这将打印(slice(1, None, None), slice(2, 20, 5))。但据我所知,这种简写不适用于括号之外。

有没有什么方法可以在其他上下文中使用切片速记?我可以定义一个虚拟对象,它只是返回传递给__getitem__的任何东西 - 这至少会给我一种使用简写语法生成片元组的方法。有更多pythonic的方式?

NumPy的有s_对象,会为你做到这一点:

05205​​

,您可以轻松简单地通过设置s_ = Foo(),然后使用s_,每当你想轻松地创建一个切片制作自己的这个版本。

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

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

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

切片实例有一些属性和方法。你可以看看帮助(切片)看更多。

+1

OP想要使用括号来生成切片对象。 – 2012-08-16 04:29:31