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

Comment trier correctement les chaînes contenant des nombres ?

DDD
DDDoriginal
2024-12-03 14:49:10312parcourir

How to Sort Strings Containing Numbers Correctly?

Comment trier correctement les chaînes contenant des chiffres

Le tri des chaînes contenant des nombres peut être difficile. La méthode sort() par défaut traite chaque caractère comme sa propre entité, ce qui entraîne un classement incorrect. Pour trier correctement ces chaînes, une approche plus sophistiquée est nécessaire.

Une méthode efficace est le tri humain, qui utilise des expressions régulières pour extraire les composants numériques des chaînes. Cette technique permet de trier les nombres indépendamment des parties alphabétiques.

Pour mettre en œuvre le tri humain, suivez ces étapes :

  1. Importez le module re.
  2. Définissez une fonction atoi(text) pour convertir une chaîne en entier ou laissez-la sous forme de chaîne si ce n'est pas un nombre.
  3. Définissez un fonction natural_keys(text) pour diviser la chaîne à l'aide de l'expression régulière (d ).
  4. Trier la liste à l'aide du paramètre key de sort(), en passant les natural_keys fonction.

Exemple :

import re

def atoi(text):
    return int(text) if text.isdigit() else text

def natural_keys(text):
    return [ atoi(c) for c in re.split(r'(\d+)', text) ]

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

alist.sort(key=natural_keys)
print(alist)

Sortie :

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

Cette approche trie avec précision les chaînes en considérant à la fois les parties alphabétiques et numériques.

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