Maison  >  Article  >  développement back-end  >  Comment réaliser un tri naturel en Python : un analogue de la fonction natsort de PHP ?

Comment réaliser un tri naturel en Python : un analogue de la fonction natsort de PHP ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-06 01:59:02318parcourir

How to Achieve Natural Sorting in Python: An Analog to PHP's natsort Function?

Tri naturel en Python : un analogue de la fonction natsort de PHP

Pour trier une liste de chaînes dans « l'ordre naturel », où les préfixes numériques sont interprétés comme des nombres entiers, il faut utiliser un algorithme spécialisé. PHP dispose de la fonction natsort qui répond à ce besoin, fournissant des résultats triés analogues à la perception humaine.

En Python, une fonctionnalité similaire peut être obtenue en utilisant les approches suivantes :

Utilisation de la fonction Natural Fonction clé :

Cette fonction effectue les conversions requises en clés qui pilotent le processus de tri naturel. Il convertit les préfixes numériques en entiers et traite les caractères non numériques comme des chaînes.

<code class="python">import re
def natural_key(string_):
    return [int(s) if s.isdigit() else s for s in re.split(r'(\d+)', string_)]</code>

Exemple d'utilisation :

<code class="python">L = ['image1.jpg', 'image15.jpg', 'image12.jpg', 'image3.jpg']
sorted(L, key=natural_key)
# ['image1.jpg', 'image3.jpg', 'image12.jpg', 'image15.jpg']</code>

En utilisant la fonction natural_key comme clé dans la fonction de tri de Python, le La liste est triée d'une manière qui s'aligne sur l'ordre naturel, en plaçant les préfixes numériques par ordre numérique croissant. order.

Approche alternative avec natcmp et natcasecmp :

Cette méthode alternative utilise des fonctions définies par l'utilisateur pour obtenir un tri naturel :

<code class="python">def try_int(s):
    try: return int(s)
    except: return s

def natsort_key(s):
    import re
    return map(try_int, re.findall(r'(\d+|\D+)', s))

def natcmp(a, b):
    return cmp(natsort_key(a), natsort_key(b))

def natcasecmp(a, b):
    return natcmp(a.lower(), b.lower())</code>

Exemple utilisation :

<code class="python">L.sort(natcasecmp)</code>

Cet extrait de code modifie efficacement la méthode de tri de la liste L pour utiliser la fonction natcasecmp pour le tri, qui effectue des comparaisons naturelles de chaînes insensibles à la casse.

En implémentant l'une ou l'autre de ces approches, les développeurs peuvent réaliser un tri naturel en Python, répondant ainsi au besoin de trier les listes d'une manière qui imite l'humain perception, en particulier lorsqu'il s'agit de chaînes contenant à la fois des caractères numériques et non 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