Ich habe das folgende Problem. Wenn ich eine Liste von ganzen Zahlen habe, möchte ich sie in eine Liste von Listen aufteilen, wenn der Schritt zwischen zwei Elementen der ursprünglichen Eingabeliste nicht 1 ist. Zum Beispiel: input = [0, 1, 3, 5, 6, 7], Ausgabe = [[0, 1], [3], [5, 6, 7]]]Python: Split-Liste von ganzen Zahlen basierend auf Schritt zwischen ihnen
Ich schrieb die folgende Funktion, aber es ist häßlich und ich fragte mich, ob jemand von euch würde hilf mir, eine bessere Lösung zu finden. Ich habe versucht, Itertools zu benutzen, konnte es aber nicht lösen.
Hier ist meine Lösung:
def _get_parts(list_of_indices):
lv = list_of_indices
tuples = zip(lv[:-1], lv[1:])
split_values = []
for i in tuples:
if i[1] - i[0] != 1:
split_values.append(i[1])
string = '/'.join([str(i) for i in lv])
substrings = []
for i in split_values:
part = string.split(str(i))
substrings.append(part[0])
string = string.lstrip(part[0])
substrings.append(string)
result = []
for i in substrings:
i = i.rstrip('/')
result.append([int(n) for n in i.split('/')])
return result
Vielen Dank! Diese
Schöne Lösung. Ich denke, die Beschreibung wird nützlich sein: 'j = count()' erstellt einen Zähler. Jeder Aufruf von 'next (j)' wird int Schritt um 1 zurückgeben. Nicht offensichtlich Python-Verhalten: Standardwert für Funktionsargument wird einmal bei der Funktionserstellung erstellt. Also wird "j" nur einmal mit count() initialisiert, beim nächsten Aufruf von 'key' wird arg' j' eine zuvor erstellte Instanz haben. 'groupby' fügt an iterable' g' alle Elemente von 'inp' an, die denselben Schlüsselwert haben. Wenn sich der Schlüsselwert geändert hat, wird ein neues g erstellt. Für Artikel von inp: item = 0, Schlüssel = 0-0 = 0; item = 1, Schlüssel = 1-1 = 0; item = 3, Schlüssel = 3-2 = 1; item = 5, key = 5-3 = 2 und so weiter. – stalk