Jak używać składni krojenia elipsy w Pythonie? [duplikat]

To pytanie ma już odpowiedź tutaj:

Pojawiło się to w Hidden features of Python , ale nie widzę dobrej dokumentacji ani przykładów wyjaśniających, jak ta funkcja działa.

Author: Community, 2008-09-23

4 answers

Użyłbyś go w swojej klasie, ponieważ żadna klasa z niego nie korzysta.

Numpy używa go, zgodnie z dokumentacją . Kilka przykładów tutaj .

W swojej klasie używałbyś tego w ten sposób:

>>> 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

Oczywiście istnieje dokumentacja Pythona i odniesienie do języka. Ale to nie jest zbyt pomocne.

 87
Author: nosklo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-29 18:25:30

Elipsa służy do wycinania wyższych wymiarów struktur danych.

Ma to oznaczać w tym momencie Wstaw tyle pełnych plasterków (:), aby rozszerzyć wielowymiarowy plasterek do wszystkich wymiarów .

Przykład :

>>> from numpy import arange
>>> a = arange(16).reshape(2,2,2,2)
Macie macierz 4-wymiarową rzędu 2x2x2x2. Aby zaznaczyć wszystkie pierwsze elementy w 4. wymiarze, można użyć notacji elipsy
>>> a[..., 0].flatten()
array([ 0,  2,  4,  6,  8, 10, 12, 14])

Co jest równoważne

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

In your own implementacje, możesz zignorować umowę wspomnianą powyżej i użyć jej do tego, co uznasz za stosowne.

 195
Author: Torsten Marek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-21 15:50:14

Jest to kolejne użycie elips, które nie ma nic wspólnego z plasterkami: często używam go w komunikacji wewnątrz wątku z kolejkami, jako znaku, który sygnalizuje "zrobione"; jest tam, jest obiektem, jest singletonem, a jego nazwa oznacza" brak", a nie nadużywane None (które można umieścić w kolejce jako część normalnego przepływu danych). YMMV.

 68
Author: tzot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-02 10:03:49

Jak stwierdzono w innych odpowiedziach, może być używany do tworzenia plastrów. Przydatne, gdy nie chcesz pisać wielu pełnych notacji (:), lub gdy po prostu nie jesteś pewien, na czym polega wymiarowość manipulowanej tablicy.

To, co uważałem za ważne, aby podkreślić, a tego brakowało w innych odpowiedziach, to to, że może być używany nawet wtedy, gdy nie ma więcej wymiarów do wypełnienia.

Przykład:

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

Spowoduje to błąd:

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

To będzie praca:

a[...,0,:]
array([0, 1])
 1
Author: Mauricio Perez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-07 04:03:58