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

Python自然排序

漆雕唯
2023-03-14
问题内容

我有一些文件需要按名称排序,但是不幸的是,我无法使用常规排序,因为我也想对字符串中的数字进行排序,因此我进行了一些研究,发现所寻找的东西叫做natural sorting

我尝试了此处给出的解决方案,并且效果很好。

但是,对于诸如PresserInc-1_10.jpgPresserInc-1_11.jpg这样的字符串,该字符串会导致特定的自然键算法失败,因为它仅与第一个整数匹配,在这种情况下,该整数将是11,因此它放弃了排序。因此,我认为可能会帮助匹配字符串中的所有数字并将它们分组在一起,因此,如果我有PresserInc-1_11.jpg算法应将其还给我111,那么我的问题是,这可能吗?

这是文件名列表:

files = ['PresserInc-1.jpg', 'PresserInc-1_10.jpg', 'PresserInc-1_11.jpg', 'PresserInc-10.jpg', 'PresserInc-2.jpg', 'PresserInc-3.jpg', 'PresserInc-4.jpg', 'PresserInc-5.jpg', 'PresserInc-6.jpg', 'PresserInc-11.jpg']


问题答案:

Google:Python自然排序。

结果1:您链接到的页面。

但是不要到此为止!

结果2:杰夫·阿特伍德(Jeff Atwood)的博客介绍了如何正确执行此操作。

结果3:我根据Jeff Atwood的博客发布的答案。

这是该答案的代码

import re

def natural_sort(l): 
    convert = lambda text: int(text) if text.isdigit() else text.lower() 
    alphanum_key = lambda key: [convert(c) for c in re.split('([0-9]+)', key)] 
    return sorted(l, key=alphanum_key)

数据结果:

PresserInc-1.jpg
PresserInc-1_10.jpg
PresserInc-1_11.jpg
PresserInc-2.jpg
PresserInc-3.jpg
等等...

看到它在线运行:ideone



 类似资料:
  • 问题内容: 我有一个熊猫DataFrame,它的索引要自然排序。Natsort似乎不起作用。在构建DataFrame之前对索引进行排序似乎无济于事,因为我对DataFrame所做的操作似乎使过程中的排序变得混乱。关于如何自然使用索引的任何想法? 问题答案: 如果要对df进行排序,只需对索引或数据进行排序,然后直接将其分配给df的索引,而不是尝试将df作为arg传递,因为这会产生一个空列表: 请注意

  • 问题内容: 请查看下面的代码: 有人可以解释一下为什么输出是 代替 ? 因为在API中它表示优先级队列的元素是根据其自然顺序进行排序的。 问题答案: PriorityQueue基于优先级堆。尽管未对元素进行排序,但此数据结构允许非常快地检索最小元素。将元素添加到PriorityQueue的速度比向基于树的TreeSet快。由于未对元素进行排序,因此如API所述,迭代器“不会以任何特定顺序返回元素”

  • 问题内容: 有没有一种优雅的方法可以在MySQL数据库中进行高性能的自然排序? 例如,如果我有此数据集: 最终幻想 最终幻想4 最终幻想10 最终幻想12 最终幻想12:爱情之链 最终幻想冒险 最终幻想起源 最终幻想战术 除了将游戏名称拆分成各个组成部分外,其他任何 优雅的 解决方案 标题 :《最终幻想》 编号 :“ 12” 副标题 :“ Promathia的链条” 确保它们以正确的顺序出现?(1

  • 问题内容: 我已经为此工作了几个月。我只是无法获得(真实的字母数字)结果。令我震惊的是我无法获得自1992年以来的成就。 我正在寻找SQL,VBS或简单的excel或access中的任何解决方案。这是我的数据: 我要查找的顺序是真实的字母数字顺序,如下所示: 库存为7800条记录,因此我在处理能力方面也遇到了一些问题。 任何帮助,将不胜感激。 杰夫 问题答案: 在本机Excel中,您可以添加多个排

  • 问题内容: 我碰巧遇到了许多语句,例如当需要自然排序并同时对数组或集合和比较器进行排序以进行总排序时,使用了compare的语句。 您可能听到的版本可能相同,也可能相同,但含义相同,但最终还是两者(比较器和类似接口)之间的区别因素之一。 但是,我找不到任何地方的两种订购类型之间的区别。如果有人可以用一个很好的例子来解释它,我将不胜感激:) 问题答案: 总排序意味着可以将所有值与所有其他值进行比较。

  • 问题内容: 如果我创建一个使用整数作为键的Python字典,是否可以安全地假设对dict进行迭代将根据键值按顺序检索项目? 即会 总是导致按键值顺序打印列表? 问题答案: 简而言之,没有。我敢打赌,您注意到字典将键的哈希用作数组的索引,并且由于int哈希到它们自己的值,因此您推断出,如果插入的值的键是整数,则插入的值将按键顺序结束。尽管该语句的前两个部分是正确的,但即使是未记录的副作用,该推论也不