利用Ascii数值的大小和高阶函数sorted可以实现
首先判断是数字还是字母,由于字母的ASCII都比数字的ASCIID大,其ASCII大小就不改变(小写>大写)。利用改变数字对应的ASCII值的大小来改变排序,如果是奇数,ASCII就加上100再乘-1,是偶数就加上200再乘-1。这样按照改变后的ASCII进行升序排列的结果为,偶数-奇数-大写-小写。再利用reverse参数对其降序排序,就是想要的结果了。当然也可利用多重判断循环也是可以实现的,我就不写了,你们加油哦!
s = 'asdf234GDSdsf230'
def num_sort(num):
if num.isdigit():
# 判断是奇数
if int(num) % 2 == 1:
# 获取ASCII值
return (ord(num)+100)*-1
else:
return (ord(num)+200)*-1
return ord(num)
print(''.join(sorted(s,key=num_sort,reverse=True)))
# 重写int函数,实现字符换’12345‘ 转换为数值12345
利用高阶函数reduce和map
reduce(函数,可迭代对象) 重做,将可迭代对象的数一一传入函数中返回最后的结果
map(函数,可迭代对象) 必须接受两个参数,一个是函数,一个是可迭代对象(可多个),返回一个map类型的迭代器
map作用:一一映射
s = '12345'
def int(s):
def num(string):
# 定义个字典,用于存储1-9,实现字符串到数字的转变
num_dict = {'0':1,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}
return num_dict[string]
# 利用高阶函数reduce和map
return reduce(lambda x,y:x*10+y,map(num,s))
print(int(s))