如何在Python中使用省略号切片语法?

时间:2020-03-06 14:34:23  来源:igfitidea点击:

这是Python的隐藏功能中提到的,但是我看不到很好的文档或者说明该功能如何工作的示例。

解决方案

我们将在自己的类中使用它,因为没有内置类可以使用它。

Numpy使用它,如文档中所述。这里有一些例子。

在我们自己的班级中,我们将像这样使用它:

>>> class TestEllipsis(object):
...     def __getitem__(self, item):
...         if item is Ellipsis:
...             return "Returning all items"
...         else:
...             return "return %r items" % item
... 
>>> x = TestEllipsis()
>>> print x[2]
return 2 items
>>> print x[...]
Returning all items

当然,这里有python文档和语言参考。但是这些不是很有帮助。

省略号用于切片高维数据结构。

它的目的是在这一点上插入尽可能多的完整切片(),以将多维切片扩展到所有尺寸。

例子:

>>> from numpy import arange
>>> a = arange(16).reshape(2,2,2,2)

现在,我们有了一个2x2x2x2阶的4维矩阵。要选择第4维的所有第一个元素,可以使用省略号

>>> a[..., 0].flatten()
array([ 0,  2,  4,  6,  8, 10, 12, 14])

相当于

>>> a[:,:,:,0].flatten()
array([ 0,  2,  4,  6,  8, 10, 12, 14])

在我们自己的实现中,我们可以随意忽略上述合同,并将其用于我们认为合适的任何事情。

这是Ellipsis的另一种用法,它与切片无关:我经常在与队列的线程内通信中使用它,作为发信号" Done"的标记;它在那里,它是一个对象,它是一个单例,其名称表示"缺乏",而且不是过度使用的None(可以将其作为常规数据流的一部分放入队列中)。 YMMV。

附注:当我在回答中说的话对这个问题没有用时,我不介意投票。然后我尝试改善答案。但是,当问题是我们如何在Python中使用省略号时,我肯定无法理解如何对这个问题的任何答案进行投票。似乎人们认为投票不足意味着我不同意或者我不喜欢这样。