如何使用Python中的省略号切片语法?(How do you use the ellipsis s

2019-06-17 15:44发布

这提出了Python中的隐藏功能 ,但我看不到解释功能如何发挥良好的文档或例子。

Answer 1:

你会用它自己的类,因为没有内置的类可以使用它。

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文档和语言参考 。 但是,这些都不是很有益的。



Answer 2:

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

它的设计,意味着在这一点上,中插入多个全片( : ),以多维片扩大到所有方面

例如

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

现在,你有为了2x2x2x2的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])

在自己的实现,你可以自由地忽略上述合同,并用它为任何你认为合适的。



Answer 3:

这是另外一个使用了省略号,它有无关片:我经常用它与队列线程内通信,因为这预示着“做”的标志; 它的存在,它是一个对象,它是一个单件,它的名字的意思是“缺乏”,并且它不是过度使用无(其可以被放置在队列中作为普通数据流的一部分)。 因人而异。



Answer 4:

在其他的答案说,它可以被用来创建片。 有用,当你不想写了许多全片的符号( : ),或当你只是不知道什么是数组的维度被操纵。

我认为重要的是要强调,那就是缺少其他的答案是,它甚至可以在没有更多的维度来填充使用。

例:

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

这将导致错误:

>>> a[:,0,:]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: too many indices for array

这将工作:

a[...,0,:]
array([0, 1])


文章来源: How do you use the ellipsis slicing syntax in Python?