- 我的思路:使用ascii码进行排序
原字符串:
s = 'asdf234GDSd6sf23'
核心是利用sorted高阶函数,写一个lamba函数指定排序条件。
我们回顾一下题目要求:小写字母-大写字母-奇数-偶数
查看一下ASCII码表
我们发现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))