PyPI 上有一个第三方库,名为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
(or os_sort_key
如果您只需要默认值)。
Caveat- 使用前请阅读该功能的API文档,了解其限制以及如何获得最佳结果。