siguiente aparece en mi Python 2.6 código:combinación feo de expresión generador con bucle para
for src, dst in ([s,d] for s in universe for d in universe if s != d):
¿Puedo hacer mucho mejor? Lo que particularmente no me gusta es que estoy especificando el mismo par dos veces, una para el ciclo for y otra para la expresión del generador. No estoy seguro de si preferiría:
for src, dst in itertools.product(universe, universe):
if src != dst:
¿Hay alguna manera de expresar este ciclo concisamente?
universe
es una lista, si hace alguna diferencia. El orden de iteración no importa.
¿Qué tipo de rutina requiere/permite un producto cruzado como este? –
Creo que su código es bueno, el primer ejemplo es más claro de entender que el otro. – dalloliogm
@Ignacio: Estoy construyendo un gráfico bidireccional cuyos nodos son los elementos del 'universo', y que será procesado por algún otro software en otro lugar que espera un conjunto de bordes. Tengo un código para calcular la existencia y el peso de cada borde: si te ayuda, puedes asumir que se trata de una función 'make_edge (src, dst)', que devuelve una descripción. Las soluciones que usan 'map' u otras funciones relacionadas para llamar' make_edge' son plausibles, y quizás lo correcto, pero convertir el cuerpo del bucle for en una función no es menos repetitivo de lo que ya lo hice, por lo que no arreglar ese problema AFAIK. –