Re: [問題] 想請教一個問題

看板Python作者 (ccc)時間14年前 (2011/02/10 23:13), 編輯推噓0(003)
留言3則, 3人參與, 最新討論串4/6 (看更多)
試著解決大量數值做sort會很慢的問題 想法: 不要全部一起sort 每次只挑一個數字出來,跟當下最大的五個數字比 所以每次最多有6個數字做sort L = ['369','638','724','920','14','50','11','65', '920', '920'] max5 = [] # 目前最大的5個數字及位置 threshold = 0 # max5裡面最小的數值,作為篩選用 for i, str_num in enumerate(L): num = int(str_num) if num <= threshold: # 比前五名還小就直接跳過 continue # 夠格的數字就可以挑戰前5大 max5.append((num, i)) max5.sort(reverse=True) while len(max5) > 5: # 踢掉比輸的 max5.pop() threshold = max5[-1][0] # 拿前五大裡面,最小的當篩選標準 print [x[1] for x in max5] # 印結果 ※ 引述《perturb (背後有老板)》之銘言: : 參考apua的做法稍加改變滿足DP1010以輸出重復最大值的位置 : >>> L = ['369','638','724','920','14','50','11','65', '920', '920'] : >>> Li = zip(L, range(len(L))) : >>> Li.sort(key=lambda x:int(x[0]), reverse=True) : >>> print [x[1] for x in Li[:5]] -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.195.30.39

02/11 02:11, , 1F
這個作法比較好, 沒有要全比的狀態下用 sort 太浪費
02/11 02:11, 1F

02/11 02:56, , 2F
怎麼大家都不愛用 numpy.argsort()
02/11 02:56, 2F

02/11 15:30, , 3F
@o@!研究一下numpy.argsort~
02/11 15:30, 3F
文章代碼(AID): #1DL026Sm (Python)
討論串 (同標題文章)
文章代碼(AID): #1DL026Sm (Python)