How to Achieve Natural Order Sorting in Python Like PHP's natsort Function?

Susan Sarandon
Release: 2024-11-06 20:47:02
Original
978 people have browsed it

How to Achieve Natural Order Sorting in Python Like PHP's natsort Function?

Python Equivalent for PHP's natsort Function: Natural Order Sorting

The PHP natsort function is used to sort a list using a "natural order" algorithm that handles strings containing numbers in a human-readable way. Python doesn't have an exact equivalent to natsort, but there are custom solutions available.

One approach is to use a combination of Python's built-in functions:

<code class="python">import re

def try_int(s):
    "Convert to integer if possible."
    try: return int(s)
    except: return s

def natsort_key(s):
    "Used internally to get a tuple by which s is sorted."
    return map(try_int, re.findall(r'(\d+|\D+)', s))

def natcmp(a, b):
    "Natural string comparison, case sensitive."
    return cmp(natsort_key(a), natsort_key(b))

def natcasecmp(a, b):
    "Natural string comparison, ignores case."
    return natcmp(a.lower(), b.lower())</code>
Copy after login

To sort a list using natural order:

<code class="python">l = ['image1.jpg', 'image15.jpg', 'image12.jpg', 'image3.jpg']
l.sort(natcasecmp)</code>
Copy after login

Another approach that supports Unicode strings is to use a custom key function based on Python's natural_key function:

<code class="python">import re
def natural_key(string_):
    """See https://blog.codinghorror.com/sorting-for-humans-natural-sort-order/"""
    return [int(s) if s.isdigit() else s for s in re.split(r'(\d+)', string_)]</code>
Copy after login

Example:

<code class="python">l = ['image1.jpg', 'image15.jpg', 'image12.jpg', 'image3.jpg']
l.sort(key=natural_key)</code>
Copy after login

The above is the detailed content of How to Achieve Natural Order Sorting in Python Like PHP's natsort Function?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!