Ensemble itération de l'ordre varie d'une série à l'

Pourquoi ne l'itération de l'ordre d'un Python jeu (avec le même contenu) varient d'une série à l'autre, et quelles sont mes options pour le rendre conforme d'une exécution?

Je comprends que l'itération de commande pour un Python ensemble est arbitraire. Si j'ai mis 'a', 'b' et 'c' dans l'ensemble et puis itérer eux, ils peuvent revenir dans n'importe quel ordre.

Ce que j'ai observé, c'est que l'ordre reste le même à l'intérieur d'une exécution du programme. C'est, si mon programme parcourt le même jeu deux fois de suite, j'ai le même ordre à chaque fois. Cependant, si je lance le programme, deux fois de suite, les modifications de la commande d'une exécution.

Malheureusement, cela casse un de mes tests automatisés, qui compare simplement la sortie de deux points de mon programme. Je ne se soucie pas de l'ordre réel, mais je voudrais qu'il soit conforme d'une exécution.

La meilleure solution que j'ai trouvé est:

  1. Copie de l'ensemble à une liste.
  2. Appliquer un arbitraire de tri de la liste.
  3. Itérer la liste au lieu de les définir.

Est-il une solution plus simple?

Remarque: j'ai trouvé des questions similaires sur StackOverlow, mais aucun qui traitent de cette question en particulier d'obtenir les mêmes résultats d'une exécution.

  • Si ce que vous faites des tests, c'est que "le programme des sorties de la même chose deux fois", la liste triée option est votre meilleur pari. Si ce que vous faites des tests, c'est que "le programme crée le même jeu deux fois", vous aurez besoin de faire un jeu de comparaison (par décapage de la sortie des deux pistes, puis unpickling la sortie des deux et définissez-la comparaison de ces, ou quelque chose de moralement équivalent).
  • J'ai unité de tests qui permettent de vérifier l'ensemble du contenu. Mais j'ai aussi ce test qui compare la sortie de deux fonctionne comme un test de cohérence. La sortie dépend, en partie, sur l'ordre des éléments dans un ensemble, mais seulement d'une manière détournée.