[PYTHON] Tri naturel

Supposons qu'il y ait une situation où les variables suivantes sont triées.

sample = ["a_12", "a_2", "a_0",  "a_10", "a_4"]

Par exemple, si vous utilisez la fonction intégrée sorted

sorted(sample)

# ['a_0', 'a_10', 'a_12', 'a_2', 'a_4']

Le résultat est obtenu. Ce serait contraire à l'intuition humaine.

Il semble plus naturel d'obtenir le résultat «['a_0', 'a_2', 'a_4', 'a_10', 'a_12']`. Cet ordre de tri naturel est appelé Ordre de tri naturel, et la méthode de tri est également appelée tri humain.

Reproduisez cet ordre en python.

Lors de l'utilisation de la bibliothèque

Utilisez natsort.

https://pypi.org/project/natsort/

$ pip install natsort
sample = ["a_12", "a_2", "a_0",  "a_10", "a_4"]
print(sample)
print(natsorted(sample, key=lambda y: y.lower()))

# ['a_12', 'a_2', 'a_0', 'a_10', 'a_4']
# ['a_0', 'a_2', 'a_4', 'a_10', 'a_12']

Lors de l'écriture d'une fonction par vous-même

Vous pouvez spécifier la clé de la fonction intégrée «tri».

def natural_sort(l):
    def alphanum_key(s):
        return [int(c) if c.isdecimal() else c for c in re.split('([0-9]+)', s) ]
    return sorted(l, key=alphanum_key)

print(sample)
print(natural_sort(sample))

# ['a_12', 'a_2', 'a_0', 'a_10', 'a_4']
# ['a_0', 'a_2', 'a_4', 'a_10', 'a_12']

Recommended Posts

Tri naturel
Trier
Insérer un tri
SélectionSort
[Python] Trier
Python #sort
Tri à bulles
Tri à bulles
AOJ Trier I-
[Python] Trier la liste de pathlib.Path dans l'ordre naturel
Générateur de nombres naturels
Fusionner le tri expliqué
Insérer l'implémentation du tri
Tri pratique du sommeil
Trier par pandas
visualiser le tri par insertion