按字典顺序对所有字符串进行排序,但如果一个字符串完全作为另一个字符串中的前缀存在,那么长度较长的字符串应该排在第一位。
例如 1 个测试,testtube 是 2 个字符串,字符串 test 作为前缀出现在 testtube 中
排序 -试管,测试。
例如 2 bank、ant、testtube、test
排序 -蚂蚁,银行,试管,测试
我们如何在 python 中做到这一点?尝试了很多但没有任何解决方案,需要帮助。
也许在每个字符串的末尾附加一个“不可能大”的字符?
def sort(a):
return sorted(a, key=lambda s: s + chr(0x10FFFF))
Run Code Online (Sandbox Code Playgroud)
演示:
>>> sort(['test', 'testtube'])
['testtube', 'test']
>>> sort(['bank', 'ant', 'testtube', 'test'])
['ant', 'bank', 'testtube', 'test']
>>> sort(['test', 'testbb', 'testa'])
['testa', 'testbb', 'test']
Run Code Online (Sandbox Code Playgroud)
它是最大的代码点(chr甚至给ValueError更大的代码点),实际上是一个“非字符”,不应该自然出现,但我们可以自由地使用它:
非字符是 Unicode 标准中永久保留供内部使用的代码点。不建议将它们用于 Unicode 文本数据的开放交换。[...] 应用程序可以在内部自由使用任何这些非字符代码点。
在该部分的后面,标准甚至建议了这种用法(强调我的):
[...] U+10FFFF 与最大的合法 UTF-32 32 位代码单元值 10FFFF 16 相关联。此属性将这两个非字符代码点呈现为可用于内部目的的标记。例如,它们可能用于指示列表的结尾,表示索引中保证高于任何有效字符值的值,等等。