首页  >  文章  >  后端开发  >  如何在Python中实现像PHP的natsort函数一样的自然顺序排序?

如何在Python中实现像PHP的natsort函数一样的自然顺序排序?

Susan Sarandon
Susan Sarandon原创
2024-11-06 20:47:02980浏览

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

PHP natsort 函数的 Python 等效项:自然顺序排序

PHP natsort 函数用于使用“自然顺序”对列表进行排序以人类可读的方式处理包含数字的字符串的算法。 Python 没有与 natsort 完全相同的功能,但有可用的自定义解决方案。

一种方法是使用 Python 内置函数的组合:

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

对使用自然顺序的列表:

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

支持 Unicode 字符串的另一种方法是使用基于 Python 的 natural_key 函数的自定义键函数:

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

示例:

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

以上是如何在Python中实现像PHP的natsort函数一样的自然顺序排序?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn