python - 在python中使用特定顺序对元素进行排序
问题描述
按字典顺序对所有字符串进行排序,但如果一个字符串完全作为前缀出现在另一个字符串中,那么长度较长的字符串应该排在第一位。
例如 1 个测试,testtube 是 2 个字符串,字符串测试作为前缀出现在 testtube
分类-试管,测试。
例如 2银行、蚂蚁、试管、测试
sorted-蚂蚁, 银行, 试管, 测试
我们如何在 python 中做到这一点?尝试了很多,但没有任何解决方案,需要帮助。
解决方案
也许在每个字符串的末尾附加一个“不可能大”的字符?
def sort(a):
return sorted(a, key=lambda s: s + chr(0x10FFFF))
演示:
>>> sort(['test', 'testtube'])
['testtube', 'test']
>>> sort(['bank', 'ant', 'testtube', 'test'])
['ant', 'bank', 'testtube', 'test']
>>> sort(['test', 'testbb', 'testa'])
['testa', 'testbb', 'test']
它是最大的代码点(chr
甚至给出ValueError
更大的代码点),实际上是一个“非字符”,不应该自然发生,但我们可以自由地使用它:
非字符是在 Unicode 标准中永久保留供内部使用的代码点。不建议将它们用于 Unicode 文本数据的开放交换。[...] 应用程序可以在内部自由使用任何这些非字符代码点。
在该部分的后面,该标准甚至建议了这种用法(强调我的):
[...] U+10FFFF 与最大的合法 UTF-32 32 位代码单元值 10FFFF 16相关联。此属性将这两个非字符代码点呈现为对内部目的有用的哨兵。例如,它们可能用于指示列表的结尾,表示索引中的值保证高于任何有效字符值,等等。
推荐阅读
- c++ - 重置移动对象的常用习语是什么?
- variables - 请打开我的电脑并为我阅读您的 Windows 10 环境变量 PATH 设置
- asp.net-core - 使用 asp.net 身份完成注册的电子邮件邀请
- mysql - 如何在超过 3 个表上进行不同的连接
- swift - 使用核心数据绑定编辑 TextField 时未触发“.disabled”修饰符
- haskell - Haskell:这些表达式的类型是什么(如果有的话)?
- python - TypeError: write() 参数必须是 str,而不是尝试从 mysql db 获取数据时的元组
- python - 权重和偏差 Detectron2 Google Colab - wandb:错误无法记录事件 [Errno 95] 不支持操作
- c++ - 使用 C++ Makefile.win 为 Windows 检测 i386 与 x64?
- node.js - 使用 npm 安装 create-react-app 时出错 & 使用 npm init react-app 时出错