Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich aufeinanderfolgende Nummerngruppen in einer Python-Liste effizient identifizieren?

Wie kann ich aufeinanderfolgende Nummerngruppen in einer Python-Liste effizient identifizieren?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-07 22:21:13363Durchsuche

How Can I Efficiently Identify Consecutive Number Groups in a Python List?

Aufeinanderfolgende Nummerngruppen in einer Liste identifizieren

Wenn man mit der Aufgabe konfrontiert wird, Gruppen aufeinanderfolgender Nummern in einer Liste zu identifizieren, gibt es mehrere Ansätze zu berücksichtigen.

Integrierte Python-Funktionalität

Python stellt für diese Aufgabe ein leistungsstarkes Werkzeug bereit: die Funktion groupby(). Mithilfe dieser Funktion können wir Elemente anhand der Differenz zwischen ihrem Index und ihrem Wert kategorisieren. Beispielsweise würde die Funktion „groupby()“ in der Liste [2, 3, 4, 5, 12, 13, 14, 15, 16, 17] die folgenden Gruppen ausgeben:

[(2, [2, 3, 4, 5]), (12, [12, 13, 14, 15, 16, 17])]

Hier: Jede Gruppe besteht aus Elementen, deren Index um den gleichen Betrag von ihrem Wert abweicht und fortlaufende Nummern angibt.

Benutzerdefiniert Funktion

Ein alternativer Ansatz besteht darin, eine benutzerdefinierte Funktion zu erstellen. Eine Implementierung ist unten angegeben:

ranges = []
for key, group in groupby(enumerate(data), lambda (index, item): index - item):
    group = map(itemgetter(1), group)
    if len(group) > 1:
        ranges.append(xrange(group[0], group[-1]))
    else:
        ranges.append(group[0])

Diese Funktion generiert eine Liste von Tupeln, wobei jedes Tupel eine fortlaufende Zahlengruppe darstellt. Für die Eingabe [2, 3, 4, 5, 12, 13, 14, 15, 16, 17] wäre die Ausgabe:

[(2, 5), (12, 17), 20]

Beachten Sie, dass einzelne Zahlen als einzelne Elemente zurückgegeben werden und nicht Bereiche.

Das obige ist der detaillierte Inhalt vonWie kann ich aufeinanderfolgende Nummerngruppen in einer Python-Liste effizient identifizieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn