Desempaquetar la lista en medio de una tupla

Tengo una lista de tamaño incierto:

l = [...] 

Y quiero descomprimir esta lista en una tupla que tiene otros valores, pero la siguiente falla:

 t = ("AA", "B", *l, "C") 

¿Cómo formo lo siguiente?

 t = ("AA", "B", l[0], ..., l[:-1], "C") 

EDITAR: también sería bueno hacer una división [a: b] solamente:

 t = ("AA", "B", l[a], ..., l[b], "C") 

A partir de Python 3.5, ahora puede utilizar su primer enfoque:

 >>> l = [1, 2, 3] >>> t = ("AA", "B", *l, "C") >>> t ('AA', 'B', 1, 2, 3, 'C') 

Puedes usar las rebanadas tal como esperas:

 >>> ("AA", "B", *l[:-1], "C") ('AA', 'B', 1, 2, 'C') 

El PEP relacionado, para referencia: PEP448

No puede desempaquetar en una tupla sustituyendo valores como ese (aún – vea PEP 448 ), porque el desempaquetado ocurrirá solo en la expresión del lado izquierdo o como dice el mensaje de error, objective de asignación .

Además, el objective de la asignación debe tener variables de Python válidas. En tu caso tienes cadenas literales también en la tupla.

Pero puedes construir la tupla que quisieras, al concatenar tres tuplas, como esta

 >>> l = [1, 2, 3, 4] >>> ("A", "B") + tuple(l[:-1]) + ("C",) ('A', 'B', 1, 2, 3, 'C') >>> ("A", "B") + tuple(l) + ("C",) ('A', 'B', 1, 2, 3, 4, 'C') 

Puedes aplanar la lista y luego convertirla en tupla.

 >>> import itertools >>> l=[1,2,3,4] >>> t = ('A', 'B', l, 'C') >>> t ('A', 'B', [1, 2, 3, 4], 'C') >>> tuple(itertools.chain.from_iterable(t)) ('A', 'B', 1, 2, 3, 4, 'C') >>>