#39570: Python 三步解決問題,新手適用


henry0985524680@gmail.com (張弘勳)

學校 : 臺北市立建國高級中學
編號 : 192343
來源 : [39.12.34.245]
最後登入時間 :
2024-10-31 20:28:41
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])
 
ZeroJudge Forum