Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich in Python eine natürliche Sortierung für Zeichenfolgen implementieren, die Zahlen und Gleitkommazahlen enthalten?

Wie kann ich in Python eine natürliche Sortierung für Zeichenfolgen implementieren, die Zahlen und Gleitkommazahlen enthalten?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-02 08:54:09532Durchsuche

How Can I Implement Natural Sorting for Strings Containing Numbers and Floats in Python?

Natürliche Sortierung für Zeichenfolgen mit Zahlen

Beim Sortieren von Zeichenfolgen, die Zahlen enthalten, liefern die Standardsortiermethoden möglicherweise nicht das gewünschte Ergebnis. Beispielsweise kann die Zeichenfolge „something12“ nach „something2“ statt davor platziert werden.

Um dies zu korrigieren, können wir eine natürliche Sortierung verwenden, die die Zahlen innerhalb der Zeichenfolgen berücksichtigt. So geht's:

Notwendige Module importieren:

Zuerst importieren wir das re-Modul für die Verarbeitung regulärer Ausdrücke.

import re

Definieren Hilfsfunktionen:

Wir definieren Hilfsfunktionen zum Konvertieren von Zeichenfolgen in Ganzzahlen und floats:

def atoi(text):
    return int(text) if text.isdigit() else text

def atof(text):
    try:
        retval = float(text)
    except ValueError:
        retval = text
    return retval

Definieren der natürlichen Sortierfunktion:

Die Funktion natural_keys teilt die Zeichenfolge mithilfe regulärer Ausdrücke in ihre Bestandteile auf:

def natural_keys(text):
    return [atoi(c) for c in re.split(r'(\d+)', text)]

Sortieren mit natürlichen Schlüsseln:

Verwendung der Die Funktion natural_keys als Schlüssel zum Sortieren ordnet die Zeichenfolgen in natürlicher Reihenfolge an:

alist = ["something1", "something12", "something17", "something2", "something25", "something29"]
alist.sort(key=natural_keys)
print(alist)

Ausgabe:

['something1', 'something2', 'something12', 'something17', 'something25', 'something29']

Handhabung von Floats:

To Sortieren Sie Zeichenfolgen, die Floats enthalten, und ändern Sie den regulären Ausdruck in natural_keys so, dass er mit Floats übereinstimmt:

def natural_keys(text):
    return [atof(c) for c in re.split(r'[+-]?([0-9]+(?:[.][0-9]*)?|[.][0-9]+)', text)]

Das obige ist der detaillierte Inhalt vonWie kann ich in Python eine natürliche Sortierung für Zeichenfolgen implementieren, die Zahlen und Gleitkommazahlen enthalten?. 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