Ich habe eine Python-Liste von Strings, sagen wir:
%Vor% Ich möchte eine neue Liste erstellen, deren Elemente jedes Element von elems
in einer zufälligen Reihenfolge eine festgelegte Anzahl von Malen wiederholen (sagen wir zweimal), aber dabei sicherstellen, dass zwei aufeinanderfolgende Elemente niemals denselben Wert haben.
Zum Beispiel ist ["D", "B", "A", "B", "D", "C", "A", "C"]
ein gutes Ergebnis. ["D", "B", "A", "B", "D", "C", "C", "A"]
ist nicht (C wird an der 6. und 7. Stelle wiederholt).
Die einfachste Idee ist wahrscheinlich nur:
%Vor%und dann ein Code, der sich um die Wiederholungen kümmert, aber alle Lösungen, die ich mir vorstellen kann, beinhalten potentiell unendliche Schleifen. Gibt es eine einfache und zuverlässige Möglichkeit, dies zu tun?
Danke.
Sie könnten eine Funktion erstellen, die prüft, ob zwei aufeinanderfolgende Werte in einer Liste x
gleich sind:
Dann mische die Liste in einer while
-Schleife, bis compareConsecutive()
nicht mehr False
:
Das kann bei einer langen Liste etwas dauern, da random.shuffle()
weiterhin Listen erzeugen kann, die aufeinanderfolgende Werte enthalten, aber es wird schließlich funktionieren:)
Ich denke, das könnte ein Algorithmus sein, um das zu tun, was Sie wollen:
Lassen Sie R
Ihre Ergebnisliste sein
e
von elems
und fügen Sie e
an R
an
elems_1 = elems \ e
, d. h. entfernen Sie e
von elems
e_1
von elems_1
und fügen Sie e_1
an R
an
elems_1 = elems \ e_1
, d. h. entfernen Sie e_1
von elems
R
lang genug ist