我有以下清单
l = ['SRATT', 'SRATW', 'CRAT', 'CRA0', 'SRBTT', 'SRBTW', 'SRAT0', 'SRBT0']
Run Code Online (Sandbox Code Playgroud)
我想按字母顺序排序,增加的规则是在末尾包含数字的字符串(实际上总是0)必须在最后一个完全按字母顺序排列的字符串后面(最后一个字母最多为W).
我怎样才能做到这一点?(如果可能的话,使用简单的方法sorted)
对于此示例列表,将获得所需的结果
['CRAT', 'CRA0', 'SRATT', 'SRATW' , 'SRAT0', 'SRBTT', 'SRBTW', 'SRBT0']
Run Code Online (Sandbox Code Playgroud)
例如以下不起作用
sorted(l, key=lambda x: x[-1].isdigit())
Run Code Online (Sandbox Code Playgroud)
因为它将包含最终数字的字符串放在最后,就像这样
['SRATT', 'SRATW', 'CRAT', 'SRBTT', 'SRBTW', 'CRA0', 'SRAT0', 'SRBT0']
Run Code Online (Sandbox Code Playgroud) 我知道如何使用sort()方法和适当的 lambda 规则在 Python 中简单地对列表进行排序。但是我不知道如何处理以下情况:
我有一个字符串列表,要么只包含字母,要么包含一个特定的关键字和一个数字。我想先对列表进行排序,以便将带有关键字的元素放在最后,然后按它们包含的数字对它们进行排序。
例如,我的列表可能是:mylist = ['abc','xyz','keyword 2','def','keyword 1']并且我希望它排序为['abc','def','xyz','keyword 1','keyword 2'].
我已经有类似的东西
mylist.sort(key=lambda x: x.split("keyword")[0],reverse=True)
Run Code Online (Sandbox Code Playgroud)
只产生
['xyz', 'def', 'abc', 'keyword 2', 'keyword 1']
Run Code Online (Sandbox Code Playgroud) 我知道这个问题已经 被问 了好 几次,但是对于简单的情况(紧凑性,可读性或用户熟练程度是决定因素)提供了不同的答案,我不确定哪一个是最有效的,因为我担心重复该操作O(1M)次.
设置如下:
A和B的float的; 这不能改变,但可以从A和创建其他结构B.A并且B长度相等,至少为4,最多为20(如果这对任何方式都有帮助).A需要根据其条目的值按降序排序,而B只需要匹配A的顺序.例:
A = {2,4,3,1} -> {4,3,2,1}
| | | |
B = {1,2,3,4} -> {2,3,1,4}
Run Code Online (Sandbox Code Playgroud)
题:
这样做最有效(快速+节省内存)的方法是什么?