Sagen wir, ich habe eine Liste von Strings:
%Vor%Ich möchte eine Liste mit Elementen erstellen, die mindestens zweimal nacheinander angezeigt werden:
%Vor%Ich weiß, dass ich eine for-Schleife verwenden muss, aber ich kann nicht herausfinden, wie ich die Elemente in einer Reihe anzielen soll. Wie kann ich das tun?
BEARBEITEN: Was passiert, wenn das gleiche Element zweimal in einem wiederholt wird? Dann wäre die eingestellte Funktion unwirksam.
%Vor% Probieren Sie itertools.groupby()
hier aus:
mit islice()
:
mit zip()
und izip()
:
timeit
Ergebnisse:
Ausgabe:
%Vor%Fazit:
Pokes Lösung ist die schnellste Lösung im Vergleich zu anderen Alternativen.
Das klingt nach Hausaufgaben, also skizziere ich nur, was ich tun würde:
a
, behalte aber den Index jedes Elements in einer Variablen. enumerate()
wird nützlich sein. for
-Schleife eine while
-Schleife aus dem Index des aktuellen Elements. break
wird hier nützlich sein. result
an, wenn Ihre Counter-Variable >=
2 ist. Die bearbeitete Frage fordert, das set () zu vermeiden und die meisten Antworten auszuschließen.
Ich dachte, ich würde die eingängigen Listen mit der guten alten Schleife von @poke vergleichen und eine andere, die ich erstellt habe:
%Vor%Gibt mir Ergebnisse:
%Vor%Eine einfache Schleife scheint also schneller zu sein als alle Listen-Comprehensions und doppelt so schnell wie die Groupby. Die grundlegenden Schleifen sind jedoch komplizierter zu lesen und zu schreiben, also würde ich wahrscheinlich in den meisten Fällen bei der groupby () bleiben.
Hier ist ein Regex-Einzeiler:
%Vor%Tut mir leid, zu faul, um es zu tun.