Identifizieren aufeinanderfolgender Nummerngruppen
In Python kann die Identifizierung aufeinanderfolgender Nummerngruppen innerhalb einer Liste mithilfe des integrierten itertools.groupby( ) Funktion. So funktioniert es:
itertools.groupby()-Funktion
Die groupby()-Funktion gruppiert Elemente eines Iterables basierend auf einer Schlüsselfunktion. In diesem Fall definieren wir eine Schlüsselfunktion, die die Differenz zwischen dem Index eines Elements und seinem Wert berechnet. Aufeinanderfolgende Zahlen haben denselben Schlüssel, was zu ihrer Gruppierung führt.
Code-Implementierung:
Beachten Sie die Beispielliste [2, 3, 4, 5, 12, 13 , 14, 15, 16, 17, 20]. Der folgende Code verwendet groupby(), um aufeinanderfolgende Zahlengruppen zu identifizieren:
from itertools import groupby from operator import itemgetter data = [2, 3, 4, 5, 12, 13, 14, 15, 16, 17, 20] ranges = [] for k, g in groupby(enumerate(data), lambda (i, x): i - x): group = map(itemgetter(1), g) if len(group) > 1: ranges.append(tuple(group[0], group[-1])) else: ranges.append(group[0])
Die Tastenfunktion verstehen:
Die Lambda-Funktion (Lambda (i, x): i - x) berechnet die Differenz zwischen dem Index (i) und dem Wert (x) eines Elements. Dieser Unterschied ermöglicht es uns, aufeinanderfolgende Zahlen zu gruppieren. Für die Zahl 2 wäre die Differenz beispielsweise 0 und für die Zahl 12 wäre die Differenz 10.
Verarbeitung gruppierter Elemente:
Für jedes Schlüssel (Differenz), groupby() erzeugt ein Generatorobjekt (g), das die entsprechenden gruppierten Elemente enthält. Wir konvertieren diesen Generator mithilfe von map() und itemgetter() in eine Liste, um nur die Elementwerte zu extrahieren.
Ergebnisse filtern und anhängen:
Wir überprüfen die Länge von die gruppierten Elemente, um festzustellen, ob sie größer als 1 sind, und geben fortlaufende Zahlen an. Wenn ja, hängen wir ein Tupel des ersten und letzten Elements in der Gruppe an die Bereichsliste an. Bei einzelnen Nummern hängen wir die Nummer selbst an.
Ausgabe:
Die Bereichsliste enthält die folgenden Gruppen fortlaufender Nummern:
[(2, 5), (12, 17), 20]
Das obige ist der detaillierte Inhalt vonWie identifiziere ich aufeinanderfolgende Nummerngruppen in Python-Listen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!