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