Set iteration Reihenfolge variiert von run zu run

Warum die iteration, um Python-set (mit gleichem Inhalt) variieren von Lauf zu Lauf, und was sind meine Möglichkeiten, für die es im Einklang von run zu run?

Ich verstehe, dass die iteration, um für ein Python set ist beliebig. Wenn ich 'a', 'b' und 'c' in einem Satz und dann Durchlaufen Sie, Sie können kommen zurück in beliebiger Reihenfolge.

Was ich beobachtet habe ist, dass die Reihenfolge gleich bleibt innerhalb eines von der Anwendung ausgeführt werden. Das ist, wenn mein Programm wiederholt den gleichen Satz zweimal hintereinander, bekomme ich die gleiche Reihenfolge, beide Male. Allerdings, wenn ich das Programm zweimal in einer Zeile, die Reihenfolge ändert sich von run zu run.

Leider bricht einer meiner automatisierten tests, welche einfach vergleicht die Ausgabe von zwei runs von meinem Programm. Ich kümmern sich nicht um die eigentliche Ordnung, aber ich möchte es konsistent sind.

Die beste Lösung, die ich mir ausgedacht habe ist:

  1. Kopieren Sie das set, um eine Liste.
  2. Wenden Sie eine beliebige Sortierung der Liste.
  3. Durchlaufen der Liste anstelle des Satzes.

Gibt es eine einfachere Lösung?

Hinweis: ich habe festgestellt, ähnliche Fragen auf StackOverlow, aber keine, die Adresse dieses Problem, immer die gleichen Ergebnisse sind.

  • Wenn das, was du bist Tests ist, dass "das Programm gibt die gleiche Sache beide Male', die sortierte Liste option ist Ihre beste Wette. Wenn das, was Sie testen, ist, dass 'das Programm erstellt den gleichen Satz beide Male', Sie benötigen dazu eine set-Vergleich (durch einlegen der Leistung der beiden läuft, dann unpickling die Ausgabe der beiden und set-vergleicht diese, oder etwas moralisch gleichwertig).
  • Ich habe die unit-tests, die überprüfen den set-Inhalt. Aber ich habe auch diesen test, vergleicht die Ausgabe von zwei läuft wie eine Plausibilitätsprüfung. Die Ausgabe abhängig ist, in Teil, auf die Reihenfolge der Elemente in einem Satz, aber nur auf Umwegen.
Schreibe einen Kommentar