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
Linda Hamiltonoriginal
2024-12-10 09:43:14666parcourir

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

serait triée comme :

something1
something12
something17
something2
something25
something29

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)]

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

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

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)]

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

something1
something2
something1.0
something1.25
something1.105

dans l'ordre suivant :

['something1', 'something1.0', 'something1.105', 'something1.25', 'something2']

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!

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