可以在括号外使用python的切片表示法吗?

时间:2012-08-16 04:01:27

标签: python slice

在括号内,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方式吗?

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:2)

NumPy有一个s_对象可以帮到你:

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

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