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

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

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

瀏覽:21日期: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 編程
相關文章:
主站蜘蛛池模板: 天堂中文在线网 | 欧美性喷潮 | 中文字幕日韩视频 | 全部免费毛片在线播放高潮 | 在线中文字幕视频 | 亚洲美女福利视频 | 久久最新视频 | 一级空姐毛片 | 97伊人网 | 国产精品一区在线 | 成年黄色网 | 久久超碰97 | 午夜欧美激情 | 欧美精品区 | 成人黄色免费观看 | 青草草在线视频 | 国产女人视频 | 玖玖爱在线精品视频 | 久久久久久久网站 | 国产黄色一级片 | 美女视频毛片 | 亚洲 欧美 综合 | 性xxxx搡xxxxx搡欧美 | 1024国产视频| 欧美专区在线播放 | 午夜精品小视频 | 亚洲精品成人 | 校园春色综合网 | 人人玩人人干 | 日韩欧美在线观看一区二区 | 国产黄色免费在线观看 | 亚洲天堂欧美 | 欧美啪啪片 | 久久久男人的天堂 | 91麻豆网站 | 日韩二区在线观看 | 亚洲天堂黄色 | 日本一道在线观看 | 国产成人精品亚洲男人的天堂 | 牛牛av在线 | 青青艹在线观看 |