Maison > développement back-end > Tutoriel Python > Comment puis-je implémenter le tri naturel pour les chaînes contenant des nombres et des flottants en Python ?

Comment puis-je implémenter le tri naturel pour les chaînes contenant des nombres et des flottants en Python ?

Mary-Kate Olsen
Libérer: 2024-12-02 08:54:09
original
532 Les gens l'ont consulté

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

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
Copier après la connexion

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
Copier après la connexion

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)]
Copier après la connexion

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)
Copier après la connexion

Sortie :

['something1', 'something2', 'something12', 'something17', 'something25', 'something29']
Copier après la connexion

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)]
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal