Maison > développement back-end > Tutoriel Python > Comment trier naturellement les chaînes contenant des nombres en Python ?

Comment trier naturellement les chaînes contenant des nombres en Python ?

DDD
Libérer: 2024-11-30 01:46:10
original
522 Les gens l'ont consulté

How to Sort Strings Containing Numbers Naturally in Python?

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

Lorsque vous traitez des chaînes contenant des nombres, les trier par ordre alphabétique peut ne pas donner les résultats souhaités. Pour trier correctement ces chaînes, vous devez prendre en compte à la fois les composants textuels et numériques.

Tri humain (tri naturel)

Tri naturel, également connu sous le nom de tri humain, est une technique utilisée pour trier les objets d'une manière cohérente avec la façon dont les humains les perçoivent. Cette approche consiste à extraire les nombres des chaînes, puis à les trier en fonction de leurs valeurs numériques.

En Python, vous pouvez implémenter un tri naturel à l'aide de la clé de tri personnalisée suivante :

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

Ceci La fonction divise la chaîne en caractères et en nombres, puis convertit les caractères numériques en nombres entiers. La liste triée est obtenue en appelant la fonction sort() avec cette clé personnalisée :

alist = ["something1", "something12", "something17", "something2", "something25", "something29"]
alist.sort(key=natural_keys)
print(alist)
Copier après la connexion

Le résultat serait :

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

Tri des chaînes avec des flottants

Si vos chaînes contiennent des nombres à virgule flottante, vous pouvez modifier la clé de tri naturelle pour l'extraire et la convertir en flottants en utilisant ce qui suit regex :

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

Cette clé modifiée vous permet également de trier les chaînes avec des nombres à virgule flottante :

alist = ["something1", "something2", "something1.0", "something1.25", "something1.105"]
alist.sort(key=natural_keys)
print(alist)
Copier après la connexion

Le résultat serait :

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

En utilisant des techniques de tri humaines, vous pouvez trier efficacement les chaînes contenant des nombres incorporés d'une manière qui correspond à l'intuition humaine.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal