我有以下清单
l = ['SRATT', 'SRATW', 'CRAT', 'CRA0', 'SRBTT', 'SRBTW', 'SRAT0', 'SRBT0']
我想按字母顺序排序,添加了一个规则,即末尾包含数字的字符串(实际上总是0)必须在最后一个完全按字母顺序排列的字符串之后(最后一个字母最多为W)。在
我怎么能做到呢?(如果可能,使用一个简单的方法,如sorted
)
对于这个示例列表,期望的结果是
^{pr2}$下面这些不起作用
sorted(l, key=lambda x: x[-1].isdigit())
因为它把包含最后一个数字的字符串放在末尾,就像这样
['SRATT', 'SRATW', 'CRAT', 'SRBTT', 'SRBTW', 'CRA0', 'SRAT0', 'SRBT0']
还有一个简单的方法,只需将
0
视为Z
:(我假设字符串前面没有零,如果是错的,请告诉我。)
底部工作液!在
第一次尝试:
更新
@StefanPochmann说,如果开头相同,最后一个非数字字符不同,这将失败。在
我们可以在key的末尾添加额外的元素,即元素本身
^{pr2}$更新(最后,希望如此)
@Demosthene注意到第二次尝试没有成功,这是真的
因此,有效的解决方案是在元素的末尾(如果存在的话)选择任何一个数字,并将其更改为超出字母和数字范围的符号,例如
^{3}$'{'
:或者
正如@StefanPochmann所说。可能更快。在
您必须保留字符串的字母标准(减去最后一个元素),并引入另一个条件:以数字结尾。在
一种更复杂但更强大的方法:
^{pr2}$(修复了Stefan指出的由1个或0个大小的元素组成的角落大小写,或者
['AB', 'AA']
大小写)相关问题 更多 >
编程相关推荐