GOOGLE ADS

viernes, 22 de abril de 2022

Comprima dos listas int con todas las combinaciones de signos posibles

Digamos que tengo dos listas de enteros:

a = [1,2]
b = [3,4]

Y quiero terminar con una lista de tuplas como esta:

[(1,3),(2,4),(-1,-3),(-2,-4),(1,-3),(2,-4),(-1,3),(-2,4)]

Es decir, estoy comprimiendo el elemento n de acon el elemento n de b, pero usando todas las combinaciones posibles de signos positivos/negativos. ¿Cuál es la forma más elegante de hacer esto?

Una forma no elegante sería crear dos listas más como esta

a_neg = [-n for n in a]
b_neg = [-n for n in b]

luego comprima acon b, a_negcon b_neg, acon b_negy a_negcon b, y combine los resultados. Esto funciona bien, pero no es satisfactorio. ¿Hay una manera más sencilla de hacer esto?


Solución del problema

No trataría de ser elegante con listas de comprensión y solo usaría un bucle for

for idx, i in enumerate(a):
c.extend([(i, b[idx]), (-i, b[idx]), (i, -b[idx]), (-i, -b[idx])])
>>> c
[(1, 3), (-1, 3), (1, -3), (-1, -3), (2, 4), (-2, 4), (2, -4), (-2, -4)]

O usando un zip

for x,y in zip(a,b):
c.extend([(x,y), (-x, y), (x,-y), (-x, -y)])

No hay comentarios:

Publicar un comentario

Regla de Firestore para acceder a la generación de subcolección Permisos faltantes o insuficientes

Tengo problemas con las reglas de Firestore para permitir el acceso a algunos recursos en una subcolección. Tengo algunos requests document...