gpt4 book ai didi

python - 如何自定义排序字母数字列表?

转载 作者:太空狗 更新时间:2023-10-29 22:12:37 24 4
gpt4 key购买 nike

我有以下列表

l = ['SRATT', 'SRATW', 'CRAT', 'CRA0', 'SRBTT', 'SRBTW', 'SRAT0', 'SRBT0']

我想按字母顺序排序,添加的规则是末尾包含数字(实际上始终为 0)的字符串必须位于最后一个完全按字母顺序排列的字符串(最后一个字母最多为 W)之后。

我该怎么做? (如果可能,使用像 sorted 这样的简单方法)


对于这个示例列表,期望的结果是

['CRAT', 'CRA0', 'SRATT', 'SRATW' , 'SRAT0', 'SRBTT', 'SRBTW', 'SRBT0']

例如以下不起作用

sorted(l, key=lambda x: x[-1].isdigit())

因为它将包含最终数字的字符串放在末尾,就像这样

['SRATT', 'SRATW', 'CRAT', 'SRBTT', 'SRBTW', 'CRA0', 'SRAT0', 'SRBT0']

最佳答案

底部的工作解决方案!

第一次尝试:

>>> l = ['SRATT', 'SRATW', 'CRAT', 'CRA0', 'SRBTT', 'SRBTW', 'SRAT0', 'SRBT0']
>>> sorted(l, key=lambda x: (x[:-1], x[-1].isdigit()))
['CRAT', 'CRA0', 'SRATT', 'SRATW', 'SRAT0', 'SRBTT', 'SRBTW', 'SRBT0']

更新

@StefanPochmann 说这将以相同的开头和不同的最后一个非数字字符失败。

我们可以在键的末尾添加额外的元素,这将是元素本身

>>> l = ['SRATT', 'SRATW', 'CRAT', 'CRA0', 'SRBTT', 'SRBTW', 'SRAT0', 'SRBT0', 'B', 'A']
>>> sorted(l, key=lambda x: (x[:-1], x[-1].isdigit(), x))
^
additional element
['A', 'B', 'CRAT', 'CRA0', 'SRATT', 'SRATW', 'SRAT0', 'SRBTT', 'SRBTW', 'SRBT0']

更新(最终,我希望如此)

@Demosthene 注意到第二次尝试没有成功,这是真的

因此可行的解决方案是选择元素末尾的任何数字(如果存在)并更改为超出字母和数字范围的符号,例如'{':

sorted(l, key=lambda x: ''.join((x[:-1], '{')) if x[-1].isdigit() else x)

sorted(l, key=lambda x: x[:-1] + '{' if x[-1].isdigit() else x)

正如@StefanPochmann 指出的那样。这可能更快。

关于python - 如何自定义排序字母数字列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41894454/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com