#26403: [Python]0.8s與28ms解法差異參考:max(key=)的用法


406490150@gms.tku.edu.tw (我是朱朱)

學校 : 國立交通大學
編號 : 139794
來源 : [140.113.236.122]
最後登入時間 :
2022-09-03 11:13:16
b898. 1. 畢氏定理 -- 2016高雄市資訊學科能力複賽 | From: [36.238.154.3] | 發表日期 : 2021-08-04 23:27

  • max函數有一個參數叫做key,與sortedkey類似
    這種比較方法是以 自己 本身產生出的衍生值來比較,例如

    In [30]: max('1','20','3','31','300', key=int)
    Out[30]: '300'
    

    就會先把字串轉成int來比較,最大就是'300'
    要注意輸出的答案並不會變成int,而是原本的str格式

  • 如果沒有key=int,最大的會是'31'
    比較方式:先字字比較,沒有字<有字

    In [31]: sorted(('1','20','3','31','300'))
    Out[31]: ['1', '20', '3', '300', '31']
    
  • 如果要同時有兩種比較,可以寫lambda,例如

    In [32]: max('003', '3', key=lambda x: (len(x), int(x)))
    Out[32]: '003'
    
    In [33]: max('003', '3')
    Out[33]: '3'
    

    應用到這題,可以參考其他解題報告與討論,或是自己想想,字串的數字要怎麼比較呢?
    如果直接轉成int當然很簡單,但速度會很慢,這時候才需要直接以字串比較
    以我的提交來說

    max(key=int)      # 需要 0.8s = 800ms
    key=lambda x:(...)# 可以縮減至 26 ~ 28ms
    

    但其實我還有另外用functools.partial,不知道會不會影響哈
    想知道怎麼用可以上網查查,或在下面問囉,表示你很認真地看完了www

 

選擇 Repo

 
ZeroJudge Forum