午夜剧场伦理_日本一道高清_国产又黄又硬_91黄色网战_女同久久另类69精品国产_妹妹的朋友在线

您的位置:首頁技術文章
文章詳情頁

Python自定義sorted排序實現方法詳解

瀏覽:13日期:2022-07-10 17:16:09

題目

輸入一個正整數數組,把數組里面的所有屬豬拼接起來成為一個數打印能拼接起來的所有數字中最大/最小的那個。

思考

直觀想法就是求出這個數組中所有數字的全排列,然后拼接起來,再比較大小即可,當然復雜度過高。

另一個想法,我們可以定義一個排序規則,如下:  如果兩個數m,n能拼接成數字mn,nm,如果mn>nm,則m應該在n前面,反之亦然

根據這個排序規則,我們可以重新排列數組,將排列好的數組拼接起來輸出即可’為了方便比較,并且防止數據溢出(比如C語言),采用字符串的方式拼接。我們很容易可以寫出如下代碼:

def compare(strNum1, strNum2): newStrNum1 = strNum1 + strNum2 newStrNum2 = strNum2 + strNum1 if newStrNum2 > newStrNum1: return -1 elif newStrNum2 == newStrNum1: return 0 else: return 1

問題

排序規則定義好了,但是問題來了,一般的 sorted 排序函數 都有相應的 cmp函數,用來定制化排序的比較方法。但是python3的sorted函數已經刪去了cmp參數,真不能跑去用python2吧

解決方案

由于python3中sorted函數除去compare函數,無法自定義排序規則,所以使用內置的函數,將cmp函數轉化為key的值

Note:

functools.cmp_to_key() 將 cmp函數 轉化為 key。

cmp函數的返回值 必須為 [1,-1,0]

python

from functools import cmp_to_keydef compare(strNum1, strNum2):'''返回最小排列的定義,如果需要最大,將返回值的+1、-1調換即可''' newStrNum1 = strNum1 + strNum2 newStrNum2 = strNum2 + strNum1 if newStrNum2 > newStrNum1: return -1 elif newStrNum2 == newStrNum1: return 0 else: return 1def print_min_nums(nums): if not nums: return 0 arr = [str(i) for i in nums] newarr = sorted(arr,key=cmp_to_key(compare)) return ''.join(newarr)if __name__ == ’__main__’: print(print_min_nums([3,32,321]))

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 成年人在线免费看 | 香蕉视频影院 | 黄色av网站免费看 | 香蕉视频成人在线 | 欧美日韩在线播放 | 国产成人精品综合久久久久99 | 91在线资源 | 日韩欧美在线视频观看 | av大片在线观看 | 欧美日韩一级在线 | 亚洲天堂伊人 | 97在线观看免费视频 | 操碰视频在线 | 人人插人人舔 | 91麻豆视频在线观看 | 九九免费精品视频 | 九九热在线观看视频 | 爱情岛论坛自拍 | 午夜国产福利视频 | av三级在线播放 | 免费黄色看片 | 国产精品1区 | 国产福利视频 | 变态 另类 国产 亚洲 | 日韩av影片 | 国产精品视频自拍 | 成人黄色在线播放 | 丰满少妇久久久久久久 | 天天操天天看 | www欧美视频| 在线激情av| 国产精品永久免费视频 | 免费国产在线视频 | 国产日韩欧美视频在线观看 | 亚洲综合在| 自拍视频一区二区 | 欧美性aaa | 欧美在线一级 | 欧美精品免费在线 | 亚洲欧美日韩综合 | 91麻豆精品视频 |