求大神用Python解决下面这个。具体问题写在问题补充内

已知字符串 a = "aAsmr3idd4bgs7Dlsf9eAF",要求用少于5行代码解决下面这个问题
去除a字符串内的数字后,请将该字符串里的单词重新排序(a-z),并且重新输出一个排序后的字符串。
(保留大小写,a与A的顺序关系为:A在a前面。例:AaBb。输出答案AAasmriDddbgslsFfe)
输出结果是这个才对AAabDddeFfgilmrsss,上面写错了

a = "aAsmr3idd4bgs7Dlsf9eAF"
b = list(filter(str.isalpha,a))
c = sorted(b,cmp=lambda x,y:1 if (x.upper()>y.upper()) else -1)
print ''.join(c)

 之前没看到要求5行内,现在四行搞定啦,其实还能缩到3行,不过影响美观,呵呵

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-04-02

输出答案AAasmriDddbgslsFfe,按照什么排序能出这样。。

a = "aAsmr3idd4bgs7Dlsf9eAF"
b = list(filter(str.isalpha,a))
b.sort()
print(''.join(b))

不知道你什么排序,我就是一般的排序,出的结果是'AADFabddefgilmrsss'

追问

我上面的那个排序结果错的。你那个才对
能解析一下第二行的意思吗

追答filter(function, sequence):对sequence中的item依次执行function(item),将执行结果为True的item组成一个List/String/Tuple(取决于sequence的类型)返回:
>>> def f(x): return x % 2 != 0 and x % 3 != 0 
>>> filter(f, range(2, 25)) 
[5, 7, 11, 13, 17, 19, 23]
>>> def f(x): return x != 'a' 
>>> filter(f, "abcdef") 
'bcdef'

list(filter(str.isalpha,a))就是在a中执行str.isalpha,筛选出字母然后变成一个列表

第2个回答  推荐于2018-04-20

整个函数正好5行,行数再少就会写的很难看了


def my_sort(a):
    def cpos(c):
        x = 2 * (ord(c.upper()) - ord('A'))
        return x + 1 if c.islower() else x
    return ''.join(sorted([x for x in a if x.isalpha()], cmp=lambda x,y: cmp(cpos(x), cpos(y))))


运行效果

>>> my_sort("aAsmr3idd4bgs7Dlsf9eAF")
'AAabDddeFfgilmrsss'

本回答被网友采纳