Maison >développement back-end >Tutoriel Python >Comment puis-je trier naturellement les chaînes contenant des nombres et des flottants intégrés ?

Comment puis-je trier naturellement les chaînes contenant des nombres et des flottants intégrés ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-30 06:59:14554parcourir

How Can I Sort Strings Containing Embedded Numbers and Floats Naturally?

Tri des chaînes avec des nombres intégrés

Le tri des listes de chaînes contenant des nombres peut poser un défi en raison des différents types de données. L'approche suivante fournit une solution pour trier correctement ces chaînes.

Pour prétraiter les chaînes, nous définissons une fonction d'assistance, atoi(), qui convertit une chaîne en entier si elle représente un nombre ; sinon, il renvoie la chaîne d'origine. Cela facilite l'extraction de composants numériques à partir de chaînes.

Ensuite, nous introduisons la fonction natural_keys(), qui divise les chaînes à l'aide d'expressions régulières et applique la fonction atoi() à chaque composant. Cela transforme la liste en une forme triable.

En utilisant la méthode sort(), nous appliquons la fonction natural_keys() comme argument clé. Cela trie la liste dans l'ordre humain, en tenant compte à la fois des composants alphabétiques et numériques.

Exemple :

Considérez la liste de chaînes suivante :

["something1", "something12", "something17", "something2", "something25", "something29"]

Tri de cette liste avec la fonction natural_keys() produit :

['something1', 'something2', 'something12', 'something17', 'something25', 'something29']

Tri du texte avec des flottants :

Pour étendre la fonctionnalité afin d'inclure des flottants, le modèle d'expression régulière dans natural_keys() peut être modifié pour correspondre au flottant -numéros de points.

return [ atof(c) for c in re.split(r'[+-]?([0-9]+(?:[.][0-9]*)?|[.][0-9]+)', text) ]

où atof() est une fonction d'assistance qui tente de convertir la chaîne en un float.

Cela permet de trier les chaînes contenant à la fois des composants alphabétiques et à virgule flottante.

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!

Déclaration:
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