編寫一個程式,将輸入字元串中的字元按如下規則排序(一個測試用例可能包含多組資料,請注意處理)。
規則 1 :英文字母從 A 到 Z 排列,不區分大小寫。
如,輸入: Type 輸出: epTy
規則 2 :同一個英文字母的大小寫同時存在時,按照輸入順序排列。
如,輸入: BabA 輸出: aABb
規則 3 :非英文字母的其它字元保持原來的位置。
如,輸入: By?e 輸出: Be?y
樣例:
輸入:
A Famous Saying: Much Ado About Nothing(2012/8).
輸出:
A aaAAbc dFgghh : iimM nNn oooos Sttuuuy (2012/8).
示例1
輸入
A Famous Saying: Much Ado About Nothing (2012/8).
輸出
A aaAAbc dFgghh: iimM nNn oooos Sttuuuy (2012/8).
def f(s):
a, L = [], len(s)
for i in range(L):
if s[i].isalpha(): #判斷是否為字母
a.append((s[i], s[i].lower(), i)) #在清單中添加小清單(這個元素,以及小寫,和位置)
b = sorted(a, key=lambda x:(x[1], x[2], x[0])) #lanbda是匿名函數,x是參數,冒号後邊是表達式,#這個的意思是以key函數的順序排序,也就是先緊着第二個的順序排序,然後是第三個,第一個重要性最低。注意的是,原清單中的元素順序不變
result = ''
for i in xrange(L):
if s[i].isalpha():
result += b[0][0]
del b[0] #删除這個元素,後邊的元素依次往前進1
else:
result += s[i]
return result
try:
while 1:
print f(raw_input())
except:
pass