• 我的思路:使用ascii码进行排序

原字符串:

s = 'asdf234GDSd6sf23'

核心是利用sorted高阶函数,写一个lamba函数指定排序条件。

我们回顾一下题目要求:小写字母-大写字母-奇数-偶数

查看一下ASCII码表

python 字符串ascii码 python字符串按ascii码排序_git

我们发现ASCII码的顺序是按照:数字-大写字母-小写字母 的顺序排列的
那么,只需要想办法让偶数的ASCII码比奇数的ASCII码小,即:偶数-奇数-大写字母-小写字母,再以降序的方式排列即可达到题目要求。
我这里是将偶数的ASCII码值减去了10(这样偶数的ASCII码:38,40,42,44,46。奇数的ASCII码:49,51,53,55,57)

P.S. 你可以发现其实偶数的ASCII码减去8就能满足需求,但我觉得10比较好看嘿嘿

  • 代码如下:
s = 'asdf234GDSd6sf23'
print(sorted(s, key=lambda x: ord(x)-10 if x.isdigit() and int(x)%2 == 0 else ord(x), reverse=True))
  • 自定义一个函数的写法:
s = 'asdf234GDSd6sf23'
def sort(str1):
    for i in str1:
        # 偶数的ascii码减10,奇数和字母按照正常ascii码来排序
        if i.isdigit() and int(i) % 2 == 0:
            return ord(i)-10
        else:
            return ord(i)

print(sorted(s, key=sort, reverse=True))