Le message suivant apparaît dans mon code Python 2.6:combinaison truand d'expression du générateur avec pour boucle
for src, dst in ([s,d] for s in universe for d in universe if s != d):
Puis-je faire beaucoup mieux? Ce que je n'aime pas particulièrement, c'est que je spécifie deux fois la même paire, une fois pour la boucle for et encore pour l'expression du générateur. Je ne suis pas certain de préférer:
for src, dst in itertools.product(universe, universe):
if src != dst:
Existe-t-il un moyen d'exprimer cette boucle de manière concise?
universe
arrive à être une liste, si cela fait une différence. L'ordre d'itération n'a pas d'importance.
Quel type de routine nécessite/permet un produit croisé comme celui-ci? –
Je pense que votre code est sympa, le premier exemple est plus clair à comprendre que l'autre. – dalloliogm
@Ignacio: Je suis en train de construire un graphe à deux voies dont les nœuds sont les éléments de 'universe', et qui sera traité par un autre logiciel ailleurs qui attend un ensemble d'arêtes. J'ai un code pour calculer l'existence et le poids de chaque arête: si cela vous aide, vous pouvez supposer que c'est une fonction 'make_edge (src, dst)', qui retourne une description. Les solutions qui utilisent 'map' ou d'autres fonctions associées pour appeler' make_edge' sont plausibles, et peut-être la bonne chose à faire, mais transformer le corps de la boucle for en une fonction n'est pas moins de répétition que je l'ai déjà fait. résoudre ce problème AFAIK. –