gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 12:12:26 26 4
gpt4 key购买 nike

我有一个字符串列表,我想对其执行 natural alphabetical sort .

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

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

这是上述列表的“排序”版本(我使用 sorted() 得到的):

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

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

最佳答案

在 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 文档的 How It Works页面,尤其是 Special Cases Everywhere!部分。


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

>>> 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 文档以了解限制以及如何获得最佳结果。

关于python - 是否有用于字符串自然排序的内置函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4836710/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com