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

2023-11-21

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

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

['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文档的怎么运行的页面,特别是特例无处不在!部分。


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

>>> 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 资源管理器一样排序?” (或者您操作系统的文件系统浏览器),截至natsort7.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文档,了解其限制以及如何获得最佳结果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • Django表单中的隐藏字段不在cleaned_data中

    我有这个表格 class CollaboratorForm forms Form user forms CharField label Username max length 100 canvas forms IntegerField wi
  • 并行执行按位运算的代码

    我有这段代码 通过将该 AU 矩阵的每个字节 8 个元素打包到 A 中来减少内存消耗 从而使 100k 200k 矩阵占用更少的空间 正如您所期望的 这段代码需要永远运行 我也计划将行数增加到 200k 我正在一个非常强大的实例 CPU 和
  • 映射 2 个数据帧并替换目标数据帧中匹配值的标头

    我有一个数据框 df1 SAP Name SAP Class SAP Sec Avi 5 C Rison 6 A Slesh 7 B San 8 C Sud 7 B df2 Name Fi Class Avi 5 Rison 6 Slesh
  • 如何在 dash/plotly 中使用 iframe? (Python/HTML)

    我正在创建一个仪表板 我想使用这个交互式地图 网站链接 https www ons gov uk peoplepopulationandcommunity healthandsocialcare causesofdeath articles
  • 为什么我的字符串中出现不需要的换行符?

    这应该很简单 这很愚蠢 但我无法让它发挥作用 我有一个在读取文件时定义的标头 if gene env in line or gene HIV2gp7 in line header line 现在这个标题看起来像 gt lcl NC 0018
  • 如何为 PyYAML 编写代表程序?

    我想要一个自定义函数来序列化任意 python 对象 就像 json dump 函数有一个名为 default 的可选参数 如果对象不是 json 可序列化的 它应该是 json 转储器将调用的函数 我只是想从 json 包中执行相当于此操
  • 如何向 Jupyter (ipython) 笔记本自动添加扩展?

    我已经安装了扩展 calico document tools 我可以使用以下命令从 Jupyter 笔记本中加载它 javascript IPython load extensions calico document tools 如何为每个
  • python 函数中的对象不可迭代错误

    我有一个简单的功能如下 comdList range 0 27 for t in comdList print t 但是它返回一个 in object not iterable 错误 在函数之外它工作正常 这是怎么回事 尝试这个 for t
  • 在Python中将月份和年份的列合并为季度和年份的列

    我有一个数据框 df Month 1 8 Year 2015 2020 df pd DataFrame data df df 想要将其转变为新列 期望的输出 df Month 1 8 Year 2015 2020 Quarter Q1201
  • python请求ssl握手失败

    每次我尝试这样做 requests get https url 我收到这条消息 import requests gt gt gt requests get https reviews gethuman com companies Trace
  • numpy.polyval() 的反函数

    我想知道 np polyval 是否有一个方便的反函数 我在其中给出 y 值并求解 x 我知道我可以做到这一点的一种方法是 import numpy as np Set up the question p np array 1 1 10 y
  • pip 升级到 pip 10.x.x 后解析需求文件的正确方法?

    所以今天我确实发现随着发布pip 10 x x the req软件包更改了其目录 现在可以在下面找到pip internal req 由于通常的做法是使用parse requirements功能在你的setup py从需求文件中安装所有依赖
  • 如何循环遍历列表中除最后一项之外的所有项? [复制]

    这个问题在这里已经有答案了 Using a for循环 如何循环遍历列表中除最后一项之外的所有项 我想遍历一个列表 检查每个项目与后面的项目 我可以在不使用索引的情况下做到这一点吗 for x in y 1 If y是一个生成器 那么上面的
  • Python for 循环前瞻

    我有一个 python for 循环 其中我需要向前查看一项以查看在处理之前是否需要执行某项操作 for line in file if the start of the next line 0 perform pre processing
  • tkinter 库 treectrl 转换为 exe 安装程序时出现 cx_freeze 错误

    我使用的是 python 版本 3 7 我使用了这个名为 treectrl 的外部库 当我运行 py 文件时它工作得很好 但是当我使用 cx freeze 转换为 exe 文件时 它给了我错误 NomodulleFound 名为 tkint
  • Python pandas:向我的数据框中添加一列来计算变量

    我有一个像这样的数据框 gt org group org1 1 org2 1 org3 2 org4 3 org5 3 org6 3 我想将列 count 添加到 gt 数据帧以计算组的成员数量 预期结果如下 org group count
  • Maya python 连接选择的属性

    我一直在尝试制作一个简单的脚本 它将采用两个视口选择 然后基本上将第二个视口的旋转连接到第一个 我不确定如何正确地从视口选择中为对象创建变量 这是我的尝试 但不起作用 import maya cmds as cmds sel cmds ls
  • XSLT 1.0 对元素进行排序

    我有以下 XML 文档
  • 将表抓取到列表中

    我正在尝试从网页中提取表格 我已经设法将表中的所有数据放入列表中 然而 所有表数据都被放入一个列表元素中 我需要帮助将 干净 数据 即字符串 没有所有 HTML 包装 从表的行获取到它们自己的列表元素中 所以而不是 list tr th a
  • SIGINT 后保存工作

    我有一个需要很长时间才能完成的程序 我想 它能够抓住SIGINT ctrl c 并调用self save work method 就目前情况而言 我的signal hander 不起作用 因为self不是由程序到达的时间定义的signal

随机推荐

  • java 方法调用的成本有多高

    我是一个初学者 我总是读到重复代码是不好的 然而 似乎为了不这样做 您通常必须进行额外的方法调用 假设我有以下课程 public class BinarySearchTree
  • 菜单上没有添加控制器,也无法在 MVC 4.5 中添加视图

    我刚刚下载了新的 nopCommerce 3 2 MVC 4 应用程序 当我在 Visual Studio 中打开解决方案时 我无法添加控制器 添加 菜单中没有 控制器 选项 当我在控制器内部右键单击时 也没有 添加视图 它似乎将解决方案中
  • 在映射数组时如何为 React 子项指定键

    我在反应联系人列表组件中有一个方法 我在其中返回另一个组件 我已经让它工作了 但我很好奇是否有更好的方法来构建我如何使用密钥 具体来说 我从下面的方法中询问这行代码 数据被硬编码为示例以开始 return
  • 在 iOS 下检索电影编解码器?

    我正在尝试找到用于压缩电影的编解码器 我确定我是否需要以某种方式使用 CMFormatDescription 并获取 CMVideoCodecType 密钥 我不知道如何通过元数据数组 关于如何检索编解码器有什么想法吗 AVURLAsset
  • 并行。未利用所有核心

    我正在使用进行繁重的数学计算Math Net Numerics内部平行Parallel For block 当我在具有 4 个核心 2 2 的本地系统中运行代码时 它使用了全部 4 个核心 但是 当我在具有 8 个核心 4 2 的开发服务器
  • Firebase 按日期过滤

    My data 我正在寻找一种使用自定义日期范围来过滤日期的方法 我在网上看到了一些他们查询日期的例子 但时间戳始终是关键 这在我的情况下是不可能的 我已经尝试过下面的代码 但它不起作用 var rootRef1 firebase data
  • Google Android - 如何确定 3g 和 2g 是否已打开

    我正在为 Google Android 开发一个简单的应用程序来打开和关闭 wifi 或 3g 或 2g I see http developer android com reference android net wifi WifiMan
  • 从命令行运行 Windows 上的 Python 3 安装

    只是好奇 是否有特殊原因导致 Python 3 x 没有安装在 Windows 上以使用命令行 python3 默认运行 就像在 Mac OSX 和 Linux 上一样 有某种方法可以配置Python 使其像这样运行吗 谢谢 编辑 只是补充
  • 使用命令行linux安装android sdk

    我想通过命令行下载android sdk 我从命令中得到了这个命令https stackoverflow com a 4569792 563306我下载了 Android SDK r18 tar 文件 提取它并在工具目录中 我尝试了这个命令
  • webpack 2:来自 UglifyJs 的 ./public/bundle.js 中出现错误 意外字符“`”

    我遇到了 2 个相关问题 第一 当我跑步时npm run build the bundle js文件没有缩小 但我确实得到了bundle js map file 第二 当我跑步时webpack d我只得到一个缩小版bundle js文件 并
  • CRC 和哈希方法(MD5、SHA1)的区别

    CRC和散列方法都可以用来验证原始数据的完整性 为什么现在大多数系统都使用哈希方法 CRC 旨在防止传输错误 而不是恶意操作 因此 它不耐碰撞 特别是 CRC 码的线性特性甚至允许攻击者以保持校验值不变的方式修改消息
  • 如何使用 Android 7.1 应用程序的 ShortcutManager API 创建动态应用程序快捷方式?

    在 Android 7 1 中 开发者可以创建应用程序快捷方式 我们可以通过两种方式创建快捷方式 使用资源 XML 文件的静态快捷方式 动态快捷方式使用ShortcutManager API 那么如何使用创建快捷方式ShortcutMana
  • Vagrant 命令停止工作:在 WIndows 上找不到命令

    我一直在尝试从 Windows 上的 Homestead 文件夹中启动 vagrant 但一直显示 bash 流浪汉 找不到命令 我认为这是 Windows 上命令配置的问题 请问 对此可以采取什么措施 提前致谢 好的 我遇到了系统环境变量
  • r 中的 Shell 命令不适用于目录名称中的空格

    我正在尝试使用 shell 命令从 R 运行简单的外部应用程序 shell C Program Files SomeApp bin Release SomeApp exe C Users SomeUser R Scripts RProjec
  • 防御性编程[关闭]

    Closed 这个问题是基于意见的 目前不接受答案 在编写代码时 您是否有意识地进行防御性编程 以确保较高的程序质量并避免您的代码被恶意利用的可能性 例如通过缓冲区溢出漏洞或代码注入 您始终应用于代码的 最低 质量水平是什么 在我的工作中
  • 以编程方式捕获 LogCat 或将其导出到文件?

    我想过滤一个logcat String myCommand logcat f sdcard output txt no filters keep writing myCommand logcat d f sdcard output txt
  • iOS 6 中的 viewDidLoad 调用过一次吗?

    小心 这个问题与最近的弃用viewDidUnload 我见过 很棒 且合乎逻辑的答案围绕这个主题 但显然事实证明他们错了 请谨慎行事 正如您所看到的 这个主题非常令人困惑 来自苹果的文档 然而系统会自动释放这些昂贵的资源 当视图未附加到窗口
  • 输入尺寸与宽度

  • 定义条件路由

    我一直在寻找类似的东西 但没有运气 我想构建一个对相同网址使用不同控制器的应用程序 基本思想是 如果用户以管理员身份登录 他使用管理员控制器 如果用户只是用户 他使用用户控制器 这只是一个例子 基本上我想要一个函数来决定控制器路由采用什么
  • 是否有用于字符串自然排序的内置函数?

    我有一个字符串列表 我想对其执行自然字母排序 例如 以下列表是自然排序的 我想要的 elm0 elm1 Elm2 elm9 elm10 Elm11 Elm12 elm13 这是上面列表的 排序 版本 我使用的sorted Elm11 Elm