Gruppieren Sie fortlaufend steigende Zahlen in der Liste [doppelt]
Wie kann ich aufeinanderfolgende aufsteigende Ganzzahlen in einer Liste zusammenfassen? Zum Beispiel habe ich die folgende Liste von ganzen Zahlen:
numbers = [0, 5, 8, 3, 4, 6, 1]
Ich möchte Elemente wie folgt zusammenfassen:
[[0, 5, 8], [3, 4, 6], [1]]
Während die nächste Ganzzahl größer als die vorherige ist, fügen Sie sie weiterhin derselben verschachtelten Liste hinzu. Wenn die nächste Ganzzahl kleiner ist, fügen Sie der Hauptliste eine verschachtelte Liste hinzu und beginnen Sie erneut.
Ich habe einige verschiedene Methoden ausprobiert (while-Schleife, for-Schleife, Aufzählung und Bereich), kann aber nicht herausfinden, wie sie an dieselbe verschachtelte Liste angehängt werden kann, solange die nächste Ganzzahl größer ist.
result = []
while (len(numbers) - 1) != 0:
group = []
first = numbers.pop(0)
second = numbers[0]
while first < second:
group.append(first)
if first > second:
result.append(group)
break
Antworten
Sie könnten eine for-Schleife verwenden:
numbers = [0, 5, 8, 3, 4, 6, 1]
result = [[]]
last_num = numbers[0] # last number (to check if the next number is greater or equal)
for number in numbers:
if number < last_num:
result.append([]) # add a new consecutive list
result[-1].append(number)
last_num = number # set last_num to this number, so it can be used later
print(result)
HINWEIS: Dies wird nicht verwendet .pop()
, sodass die numbers
Liste intakt bleibt. Auch eine Schleife = O (N) Zeitkomplexität !!
Wenn Pandas erlaubt sind, würde ich das tun:
import pandas as pd
numbers = [0, 5, 8, 3, 4, 6, 1]
df = pd.DataFrame({'n':numbers})
[ g['n'].values.tolist() for _,g in df.groupby((df['n'].diff()<0).cumsum())]
produziert
[[0, 5, 8], [3, 4, 6], [1]]
Du kannst das:
numbers = [0, 5, 8, 3, 4, 6, 1]
result = []
while len(numbers) != 0:
secondresult = []
for _ in range(3):
if numbers != []:
toappend = numbers.pop(0)
secondresult.append(toappend)
else:
continue
result.append(secondresult)
print(result)
Verwenden Sie while und for-Schleifen. und hängen Sie sie an das zweite Ergebnis und Ergebnis an