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

Comment puis-je trier naturellement les chaînes avec des nombres intégrés en Python ?

Linda Hamilton
Libérer: 2024-12-10 09:43:14
original
726 Les gens l'ont consulté

How Can I Sort Strings with Embedded Numbers Naturally in Python?

Tri naturel : l'art d'arranger des chaînes avec des nombres intégrés

Trier des chaînes avec des nombres peut être une tâche délicate, mais c'est essentiel pour beaucoup candidatures. Dans cette séance de questions-réponses, nous explorerons une solution qui permet d'obtenir des résultats de tri semblables à ceux d'un humain, vous permettant d'organiser des chaînes telles que "quelque chose1", "quelque chose2" et "quelque chose17" dans un ordre logique.

Le défi :

L'entrée donnée consiste en une liste de chaînes contenant des nombres. Cependant, la méthode sort() par défaut ne parvient pas à les organiser d’une manière logique pour les humains. Par exemple, la liste suivante :

something1
something12
something17
something2
something25
something29
Copier après la connexion
Copier après la connexion

serait triée comme :

something1
something12
something17
something2
something25
something29
Copier après la connexion
Copier après la connexion

La solution : les clés naturelles

La solution réside en utilisant des clés naturelles, une méthode de tri conçue pour la lisibilité humaine. Les clés naturelles traitent les nombres dans les chaînes comme des entités distinctes tout en conservant la structure globale de la chaîne.

Voici une implémentation Python utilisant la fonction natural_keys :

import re

def natural_keys(text):
    return [int(c) if c.isdigit() else c for c in re.split(r'(\d+)', text)]
Copier après la connexion

Lorsqu'elle est appliquée à la liste d'entrée, la le résultat serait :

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

Considérations supplémentaires :

Si vous devez trier les chaînes avec des nombres à virgule flottante, vous pouvez modifier l'expression régulière dans la fonction natural_keys pour faire correspondre les flottants au lieu des entiers.

def natural_keys(text):
    return [float(c) if c.isdigit() or '.' in c else c for c in re.split(r'[+-]?([0-9]+(?:[.][0-9]*)?|[.][0-9]+)', text)]
Copier après la connexion

Cette amélioration vous permet de trier des chaînes comme :

something1
something2
something1.0
something1.25
something1.105
Copier après la connexion

dans l'ordre suivant :

['something1', 'something1.0', 'something1.105', 'something1.25', 'something2']
Copier après la connexion

En adoptant le pouvoir des clés naturelles, vous pouvez désormais organiser sans effort chaînes avec des nombres intégrés d'une manière lisible par l'homme, rendant vos tâches de manipulation de données plus efficaces et intuitives.

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