appare quanto segue il mio codice Python 2.6:Ugly combinazione di generatore di espressione per ciclo
for src, dst in ([s,d] for s in universe for d in universe if s != d):
Posso fare molto meglio? Ciò che in particolare non mi piace è che in effetti sto specificando la stessa coppia due volte, una volta per il ciclo for e ancora per l'espressione del generatore. Non sono sicuro se preferirei:
for src, dst in itertools.product(universe, universe):
if src != dst:
C'è un modo per esprimere questo ciclo in modo conciso?
universe
sembra essere una lista, se fa alcuna differenza. L'ordine di iterazione non ha importanza.
Che tipo di routine richiede/consente un prodotto incrociato come questo? –
Penso che il tuo codice sia bello, il primo esempio è più chiaro da capire rispetto all'altro. – dalloliogm
@Ignacio: Sto costruendo un grafico a 2 vie i cui nodi sono gli elementi di 'universe', e che sarà elaborato da qualche altro software altrove che si aspetta un insieme di spigoli. Ho il codice per calcolare l'esistenza e il peso di ogni spigolo: se ti aiuta puoi supporre che questa sia una funzione 'make_edge (src, dst)', che restituisce una descrizione. Le soluzioni che usano 'map' o altre funzioni correlate per chiamare' make_edge' sono plausibili, e forse la cosa giusta da fare, ma trasformare il corpo del ciclo for in una funzione non è meno una ripetizione di quello che ho già, quindi non lo fa risolvere quel problema AFAIK. –