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.
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']
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