Sortierung in python – wie man eine Liste mit alphanumerischen Werten sortiert?

Ich habe eine Liste, die aus Details wie folgt besteht:

list1 = ["1", "100A", "342B", "2C", "132", "36", "302F"] 

Nun möchte ich diese Liste sortieren, so dass die Werte in der folgenden Reihenfolge sind:

  • Definieren eine einmalige Klasse innerhalb von Python unittest
  • Gibt es eine Möglichkeit, alle Pythonabhängigkeiten in einzelne ausführbare Dateien zu packen
  • Python - Paramiko - inkompatibler ssh Server
  • Python 2.7 - win32com.client - Verschieben eines Arbeitsblattes von einer Arbeitsmappe in eine andere
  • C ++ - Pythonbindung mit Ctypen - Mehrfache Werte in Funktion zurückgeben
  • Python unichr problem
  •  list1 = ["1", "2C", "36", "100A", "132", "302F", "342B"] 

    Nur tun list1.sort() offensichtlich gibt nicht die richtige Antwort – es gibt:

     list1 = ["1", "100A", "132", "2C", "36", "302F", "342B"] 

    Ich nehme an, das ist, weil python alle diese als Strings direkt behandelt. Allerdings möchte ich sie nach ihrem numerischen Wert FIRST sortieren und dann das Zeichen, das der Nummer folgt.

    Wie gehe ich vor

    Ich danke dir sehr 🙂

  • PIL-Filterpixel und einfügen
  • Laden Matlab spärliche Matrix mit -v7.3 (HDF5) in Python gespeichert und auf sie
  • Wie bekomme ich die Client-IP eines Tornado-Antrags?
  • BeautifulSoup Scraping: Laden von div statt des Inhalts
  • Unbenannte überspringen, wenn eine Bedingung in SetUpClass fehlschlägt
  • Ist diese Annäherung an Python-Enten-Typisierung gemischt mit isinstance () sinnvoll?
  • 2 Solutions collect form web for “Sortierung in python – wie man eine Liste mit alphanumerischen Werten sortiert?”

    Sie wollen natürliche Art verwenden :

     import re _nsre = re.compile('([0-9]+)') def natural_sort_key(s): return [int(text) if text.isdigit() else text.lower() for text in re.split(_nsre, s)] 

    Beispiel:

     >>> list1 = ["1", "100A", "342B", "2C", "132", "36", "302F"] >>> list1.sort(key=natural_sort_key) >>> list1 ['1', '2C', '36', '100A', '132', '302F', '342B'] 

    Dies funktioniert durch Aufteilen der Elemente in Listen, die die Zahlen voneinander trennen und sie als Ganzzahlen anstelle von Strings vergleichen:

     >>> natural_sort_key("100A") ['', 100, 'a'] >>> natural_sort_key("342B") ['', 342, 'b'] 

    Beachten Sie, dass dies nur in Python3 funktioniert, wenn Sie immer Ints mit Ints und Strings mit Strings vergleichen, sonst erhalten Sie eine TypeError: unorderable types Ausnahme.

    Nun, Sie müssen einen Weg finden, um Ihre Strings zu Zahlen zuerst zu konvertieren. Beispielsweise

     import re def convert(str): return int("".join(re.findall("\d*", str))) 

    Und dann benutzt du es als sortschlüssel:

     list1.sort(key=convert) 
    Python ist die beste Programmiersprache der Welt.