Tri naturel des chaînes avec des nombres
Lors du tri de chaînes contenant des nombres, les méthodes de tri par défaut peuvent ne pas donner le résultat souhaité. Par exemple, la chaîne "quelque chose12" peut être placée après "quelque chose2" au lieu d'être avant.
Pour remédier à cela, nous pouvons utiliser le tri naturel, qui prend en compte les nombres contenus dans les chaînes. Voici comment procéder :
Importation des modules nécessaires :
Tout d'abord, nous importons le module re pour la gestion des expressions régulières.
import re
Définition Fonctions d'assistance :
Nous définissons des fonctions d'assistance pour convertir des chaînes en entiers et flottants :
def atoi(text): return int(text) if text.isdigit() else text def atof(text): try: retval = float(text) except ValueError: retval = text return retval
Définition de la fonction de tri naturel :
La fonction natural_keys divise la chaîne en ses parties constitutives à l'aide d'expressions régulières :
def natural_keys(text): return [atoi(c) for c in re.split(r'(\d+)', text)]
Tri avec des clés naturelles :
Utilisation des natural_keys fonctionne comme une clé de tri et place les chaînes dans l'ordre naturel :
alist = ["something1", "something12", "something17", "something2", "something25", "something29"] alist.sort(key=natural_keys) print(alist)
Sortie :
['something1', 'something2', 'something12', 'something17', 'something25', 'something29']
Gestion des flotteurs :
Pour triez les chaînes contenant des flottants, modifiez l'expression régulière dans natural_keys pour qu'elle corresponde aux flottants :
def natural_keys(text): return [atof(c) for c in re.split(r'[+-]?([0-9]+(?:[.][0-9]*)?|[.][0-9]+)', text)]
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!