Mischen Sie zwei Listen Python

8

Ich versuche eine Funktion zu erstellen, um zwei Listen in Python zu mischen, oder besser gesagt, setze das Element von list2 in list1. Es ist erforderlich, dass in der Ausgabeliste nicht mehr als zwei aufeinander folgende Elemente den gleichen Wert haben

Zum Beispiel:

%Vor%

Falsches Ausgabebeispiel:

%Vor%

Hier ist meine Lösung:

%Vor%

Das Problem besteht darin, die Ausgabe mit mehr als zwei derselben Elemente zu erhalten, die nebeneinander stehen, oder die Länge der Ausgabeliste ist länger als die kombinierte Länge von zwei Listen

Zum Beispiel eine meiner Ausgaben

%Vor%

Was mache ich hier falsch?

Bearbeiten 1

Clodion hat mich gefragt, also lege ich das hier auf

Die Ergebnisse können zufällig sein, solange sie die Anforderung in der Frage erfüllen. Die Reihenfolge der Elemente spielt keine Rolle, solange nicht mehr als zwei nebeneinanderstehende Elemente den gleichen Wert haben

Bearbeiten 2

Ich versuche, herumzureißen, indem ich eine iterierbare Klasse mit Clodion-Lösung erstelle. Hier ist der neue Code:

%Vor%

Das Ergebnis ist ziemlich gut ausgefallen, außer dass der Code unbegrenzt ausgeführt wird und ich KeyboardInterrupt verwenden muss, um den Code zu stoppen. Was mache ich in diesem Fall falsch? Ich wäre dankbar mit einer gründlichen Erklärung, da ich ein Neuling in Python und Iterator bin

Bearbeiten Sie 3

Das Iteratorproblem wurde einfacher gelöst als ich denke. Es stellte sich heraus, dass das, was in iter zurückgegeben wurde, das ist, was die Klasse zurückgibt, wenn sie die for-Schleife aufruft

Lösung:

%Vor%     
Tuan Dinh 29.07.2015, 18:26
quelle

2 Antworten

6

Sie könnten einen Greedy-Algorithmus implementieren, der versucht, den häufigsten Gegenstand zu erhalten so oft wie möglich (d. h. bis zu zweimal) und dann den nächst häufigsten Gegenstand ergeben wenn nötig.

Dies hat zwei Vorteile gegenüber der Suche nach Zufallshuffle:

  • Der Greedy-Algorithmus ist viel schneller, wenn die Länge von items zunimmt:

    %Vor%
  • Es kann identifizieren, wenn keine Lösung vorhanden ist, während eine zufällige Zufallssuche durchgeführt wird Loops für immer, wenn besuchte Shuffle nicht zwischengespeichert werden.

%Vor% %Vor%     
unutbu 29.07.2015, 18:47
quelle
1

Sie können shuffle von random :

verwenden %Vor%

Ergebnis:

%Vor%

Erklärung: Ich füge die zwei Listen und suffle es hinzu. Dann wiederhole ich shuffle , bis es nicht mehr 3 gleiche fortlaufende Nummern gibt. Wie Kommentar darauf hinweist, kann es eine lange Zeit dauern, aber es ist leicht, eine Begrenzung der Iterationen zu machen.
Versuchen zu erklären, warum dein Code nicht funktioniert:

%Vor%

Nun? Ich bin klar?

%Vor%

Wenn randint i angibt, wird vor den Elementen "X" eingefügt.
Sie erhöhen i und Sie, so dass ich genau das gleiche Element finde:

%Vor%

Das ist das Problem, weil Sie immer noch in der gleichen Schleife sind !!! Sie können also mehrere temp [0] einfügen, bevor Sie softGuy um ein Element reduzieren. Ja?
Jeder Vorschlag wäre willkommen!

    
Clodion 29.07.2015 18:38
quelle

Tags und Links