a225.
明明愛排列
| From: [39.12.96.63] |
發表日期
:
2024-03-06 22:54
第一步,依照最後一個數字由小排到大:
lambda x:x[:-1] 反還字串x的倒數第一個字元 ;
sort(key=function())--->依照function()的反還值比較大小,
所以這裡的sort會抓出字串的最後一個字元進行比較,並依此結果排列整個list。
第二步,切割list:
spliter()函數將同字尾的字元裝進一個小list,接著將多個小list儲存在一個容器裡,並返還容器。
第三步,排列後輸出
將容器內的list取出,並將list內的字串轉成整數,接著使用sort(reverse=True),
reverse的預設值為False,當reverse=True時,sort將對list降冪排列,接著,我們
從排列好的list中取出整數,將其轉換成string後加入答案。
那為甚麼我們要先把他轉成int,再轉成strings呢?一開始直接用string型態進行排列不就好了嗎?其實不然,sort對字串的排列方法是先排字串最前面的字元大小的,如果再string型態排列,會出現 '52' 比 '11112' 前面 這種情況,因為'5'>'1'。
def spliter(nl):
a=nl[0][-1]
value=[]
splited_numbers=[]
for item in nl:
if item[-1]==a:
splited_numbers.append(int(item))
else:
value.append(splited_numbers)
splited_numbers=[int(item)]
a=item[-1]
value.append(splited_numbers)
return value
while True:
try:
n=int(input())
except:
break
answer=''
numbers=input().split()
numbers.sort(key=lambda x : x[-1])
for item in spliter(numbers):
item.sort(reverse=True)
for thing in item:
answer+=str(thing)+' '
print(answer[:-1])