当前位置: 首页 > 面试题库 >

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

松景铄
2023-03-14
问题内容

使用Python 3.x,我有一个要对其执行自然字母排序的字符串列表。

自然排序: Windows中文件的排序顺序。

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

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

这是上面列表的“排序”版本(我所拥有的):

['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文档的“ 如何工作”页面,尤其是“ 到处都是特殊情况”!部分。

如果需要排序键而不是排序功能,请使用以下公式之一。

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


 类似资料:
  • 问题内容: 我有一个数组 并且需要对其进行排序,使其看起来像; 我尝试了排序功能; 但这给出了命令 我试图考虑一个正则表达式可以正常工作,但无法解决这个问题。 如果有帮助,格式将始终为2个字母,x个数字,然后是任意数量的字符。 问题答案: 这称为“自然排序”,可以像这样在JS中实现: 要以相反的顺序排序,只需交换参数即可: 或简单地

  • 问题内容: 我有一些文件需要按名称排序,但是不幸的是,我无法使用常规排序,因为我也想对字符串中的数字进行排序,因此我进行了一些研究,发现所寻找的东西叫做。 我尝试了此处给出的解决方案,并且效果很好。 但是,对于诸如和这样的字符串,该字符串会导致特定的自然键算法失败,因为它仅与第一个整数匹配,在这种情况下,该整数将是和,因此它放弃了排序。因此,我认为可能会帮助匹配字符串中的所有数字并将它们分组在一起

  • 问题内容: 在python中,是否有内置的方法对字符串执行readline()?我有大量的数据,只想剥离前几行而对整个字符串不做split()。 假设的例子: 我希望这导致: 我知道编写一个可以做到这一点的类非常容易,但是我正在寻找内置的东西。 编辑:Python v2.7 问题答案: Python 2 您可以使用StringIO: 如果性能很重要,请确保使用cStringIO。 Python 3

  • 我有一个对象的,需要根据进行排序。 列表中的每个对象都包含以下内容 现在,假设我想先按“”下单,然后按“”下单。所以苹果排名第一,芒果紧随其后。 我可以做一个普通的asc/desc排序,但这是不够的。也可以使用apache公共资源来做上面的排序?

  • 本文向大家介绍python字符串排序方法,包括了python字符串排序方法的使用技巧和注意事项,需要的朋友参考一下 本文以实例形式简述了Python实现字符串排序的方法,是Python程序设计中一个非常实用的技巧。分享给大家供大家参考之用。具体方法如下: 一般情况下,python中对一个字符串排序相当麻烦: 一、python中的字符串类型是不允许直接改变元素的。必须先把要排序的字符串放在容器里,如

  • 问题内容: 我正在使用SQL Server 2008。 我有一张桌子,桌子上有一列type 。它当前填充有实际代表数字的字符串。不幸的是,该列必须保留。 我希望查询该字段以获取最大数值,但是由于这是A,所以我得到的是词汇最大值,而不是自然顺序最大值。 我以为我会尝试通过使用该查询的子句来解决此问题,并更改为提供数字自然顺序的排序规则,例如此链接 对于SQL Server 2008,是否有这样的排序