Crea una rebanada usando una tupla

¿Hay alguna manera en Python para usar una tupla como los índices para una rebanada? Lo siguiente no es válido:

>>> a = range(20) >>> b = (5, 12) # my slice indices >>> a[b] # not valid >>> a[slice(b)] # not valid >>> a[b[0]:b[1]] # is an awkward syntax [5, 6, 7, 8, 9, 10, 11] >>> b1, b2 = b >>> a[b1:b2] # looks a bit cleaner [5, 6, 7, 8, 9, 10, 11] 

Parece una syntax razonablemente pythonica, así que me sorprende que no pueda hacerlo.

(actualización) Y la solución resulta ser:

 >>> a[slice(*b)] [5, 6, 7, 8, 9, 10, 11] 

    Puedes usar la syntax *args Python para esto:

     >>> a = range(20) >>> b = (5, 12) >>> a[slice(*b)] [5, 6, 7, 8, 9, 10, 11] 

    Básicamente, le está diciendo a Python que descomprima la tupla b en elementos individuales y pase cada uno de esos elementos a la función slice() como argumentos individuales.

    ¿Qué tal a[slice(*b)] ?

    ¿Es eso suficientemente python?

    slice toma hasta tres argumentos, pero solo le das uno con una tupla. Lo que necesitas hacer es que Python lo descomprima, así:

     a[slice(*b)] 

    Solo falta un pequeño personaje;)

     In [2]: a = range(20) In [3]: b = (5, 12) In [4]: a[slice(*b)] Out[4]: [5, 6, 7, 8, 9, 10, 11