Betrachten das „string“ (behandle es als eine Anordnung von Ziffern)„Splitting“, die Ausgabe eines RLE (groupby) in Abhängigkeit von einem definierten Wert (das „Zeichen“ auf die RLE aufzuspalten)
0 0 1 8 8 8 1 0
die RLE („groupby“) ist:
[(0,2), (1, 1), (8,3), (1, 1), (0, 1)]
wir dann mit der Summe der Lauflängen der vorangehenden Elemente des obigen RLE reichern.
somit die angereicherte Version des obigen wird:
[(0, (0,2)), (0+2, (1, 1)), (0+2+1, (8,3)), (0+1+2+3, (1, 1)), (0+1+2+3+1, (0, 1))]
Die "string" Split von 1:
0 0 , 8 8 8 , 0
RLE Split auf 1
[(0,2)] , [(8,3)] , [(0, 1)]
Die „string "Split auf 8:
0 0 1 , , , 1 0
RLE Split auf 8
[(0,2), (1, 1)] , , , [(1, 1), (0, 1)]
Hinweis: In meinen Beispielen habe ich ohne bereichern sie die "RLE Split auf Z" Listen zitiert. Das wäre nicht so. Ich habe sie weggelassen, um Unordnung zu vermeiden. Zum Beispiel sollte wirklich das "RLE Split auf 1" wird behandelt wie:
[(0, (0,2))] , [(0+2+1, (8,3))] , [(0+1+2+3+1, (0, 1)]
Wie kann ich dieses "RLE split" auf Z erreichen (= 1, 8; in diesem Fall)
Es ist in Ordnung, leere Arrays (nach dem Split) wegzulassen.
Vielleicht eine kluge Liste comp.? (Es scheint ein wenig leichter mit einem lösen for-Schleife mit einer append verschachtelt innerhalb)
Ich bin verwirrt. Soll ein Ausdruck wie '0 + 2 + 1' eine Zeichenkette sein oder willst du '3'? – aaronasterling
Nur 3 - Ich wollte die Dinge abbauen, um lesbar zu sein. Entschuldigung für die Verwirrung! – PoorLuzer
Angenommen RLE = [(0,2), (1,1), (8,3), (4,2), (1,1), (0,1)]; Sollte das Ergebnis [(0, (0,2))] sein, [(0 + 2 + 1, (8,3), ** (4,2) **)], [(0 + 2 + 1 + 3 + 2 + 1, (0, 1)] oder [(0, (0,2))], [(0 + 2 + 1, (8,3)), ** (0 + 2 + 1 + 3 , (4,2)) **], [(0 + 2 + 1 + 3 + 2 + 1, (0, 1)] – Kabie