Por qué funciona en Numpy pero no las listas de Python
Porque con __getitem__
puede programar sus clases para hacer lo que quiera con :
y argumentos múltiples.
Numpy lo hace, pero el list
incorporado no lo hace.
Más precisamente:
class C(object):
def __getitem__(self, k):
return k
# Single argument is passed directly.
assert C()[0] == 0
# Multiple indices generate a tuple.
assert C()[0, 1] == (0, 1)
# Slice notation generates a slice object.
assert C()[1:2:3] == slice(1, 2, 3)
# If you omit any part of the slice notation, it becomes None.
assert C()[:] == slice(None, None, None)
assert C()[::] == slice(None, None, None)
assert C()[1::] == slice(1, None, None)
assert C()[:2:] == slice(None, 2, None)
assert C()[::3] == slice(None, None, 3)
# Tuple with a slice object:
assert C()[:, 1] == (slice(None, None, None), 1)
# Ellipsis class object.
assert C()[...] == Ellipsis
Podemos entonces abrimos objetos de división como:
s = slice(1, 2, 3)
assert s.start == 1
assert s.stop == 2
assert s.step == 3
Por eso es que cuando escribe: dice
[][1, 2]
Python:
TypeError: list indices must be integers, not tuple
ya que están tratando de pasar (1, 2)
a la lista de __getitem__
, y las listas incorporadas no están programados para hacer frente a los argumentos de tupla, sólo enteros.
Buena atrapada! Me inclino ante tus habilidades de depuración psíquica. :) –