8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

是否有用于字符串自然排序的内置函数?

Ticherhaz FreePalestine 1月前

83 0

我有一个字符串列表,我想对其进行自然的字母排序。例如,以下列表是自然排序的(我想要的):['elm0', 'elm1', 'Elm2', 'elm9', 'elm10', '

我有一个字符串列表,我想对其进行 自然字母排序 .

例如,以下列表是自然排序的(我想要的):

['elm0', 'elm1', 'Elm2', 'elm9', 'elm10', 'Elm11', 'Elm12', 'elm13']

这里是上面列表的“排序”版本(我使用 sorted() ):

['Elm11', 'Elm12', 'Elm2', 'elm0', 'elm1', 'elm10', 'elm13', 'elm9']

我正在寻找一个与第一个行为相似的排序函数。

帖子版权声明 1、本帖标题:是否有用于字符串自然排序的内置函数?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Ticherhaz FreePalestine在本站《sorting》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 的第三方库 natsort (坦白说,我是这个包的作者)。对于你的情况,你可以做以下任一操作:

    >>> from natsort import natsorted, ns
    >>> x = ['Elm11', 'Elm12', 'Elm2', 'elm0', 'elm1', 'elm10', 'elm13', 'elm9']
    >>> natsorted(x, key=lambda y: y.lower())
    ['elm0', 'elm1', 'Elm2', 'elm9', 'elm10', 'Elm11', 'Elm12', 'elm13']
    >>> natsorted(x, alg=ns.IGNORECASE)  # or alg=ns.IC
    ['elm0', 'elm1', 'Elm2', 'elm9', 'elm10', 'Elm11', 'Elm12', 'elm13']
    

    您应该注意到,它 natsort 使用通用算法,因此它应该适用于您向其输入的任何输入。如果您想详细了解为什么选择使用库来执行此操作而不是使用自己的函数,请查看文档 natsort 的“ 工作原理” 页面,尤其是 “特殊情况无处不在!” 部分。


    如果您需要排序键而不是排序函数,请使用以下任一公式。

    >>> from natsort import natsort_keygen, ns
    >>> l1 = ['elm0', 'elm1', 'Elm2', 'elm9', 'elm10', 'Elm11', 'Elm12', 'elm13']
    >>> l2 = l1[:]
    >>> natsort_key1 = natsort_keygen(key=lambda y: y.lower())
    >>> l1.sort(key=natsort_key1)
    >>> l1
    ['elm0', 'elm1', 'Elm2', 'elm9', 'elm10', 'Elm11', 'Elm12', 'elm13']
    >>> natsort_key2 = natsort_keygen(alg=ns.IGNORECASE)
    >>> l2.sort(key=natsort_key2)
    >>> l2
    ['elm0', 'elm1', 'Elm2', 'elm9', 'elm10', 'Elm11', 'Elm12', 'elm13']
    

    2020 年 11 月更新

    鉴于一个常见的请求/问题是“如何像 Windows 资源管理器一样排序?”(或您操作系统的文件系统浏览器),从 natsort 版本 7.1.0 开始,有一个名为 os_sorted 可以做到这一点。在 Windows 上,它将按照与 Windows 资源管理器相同的顺序进行排序,而在其他操作系统上,它应该像本地文件系统浏览器一样进行排序。

    >>> from natsort import os_sorted
    >>> os_sorted(list_of_paths)
    # your paths sorted like your file system browser
    

    对于那些需要排序键的用户,您可以使用 os_sort_keygen (或者 os_sort_key 如果您只需要默认值)。

    警告 - 请在使用前阅读此功能的 API 文档,以了解其局限性以及如何获得最佳结果。

返回
作者最近主题: