色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

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

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

瀏覽:5日期: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 編程
相關文章:
主站蜘蛛池模板: 精品亚洲成a人在线观看 | 免费一级肉体全黄毛片高清 | 亚洲一区二区三区免费视频 | 性做爰片免费视频毛片中文i | 国产精品一区二区av | 特级毛片8级毛片免费观看 特级毛片免费观看视频 | 成人国产三级在线播放 | 亚洲高清国产一区二区三区 | 一级片美女 | 国产aaa级一级毛片 国产aaa毛片 | 成人看片在线观看免费 | 亚洲男人在线天堂 | 国产欧美在线观看 | 一区二区三区不卡在线观看 | 亚洲三级在线看 | youjizz日韩 | 国产uv1区二区三区 国产va免费精品高清在线观看 | 成人免费黄色网址 | 视频二区欧美 | 手机看片国产日韩 | 成人深夜福利在线播放不卡 | 国产精品三级a三级三级午夜 | 性欧美久久 | 小屁孩cao大人免费网站 | 毛片免费在线播放 | 91亚洲国产成人久久精品网址 | 欧美一级毛片大片免费播放 | 男人性天堂 | 美女福利视频午夜在线 | 日本欧美一区二区三区高清 | 99久久免费看精品国产一区 | 足恋玩丝袜脚视频免费网站 | 亚洲m男在线中文字幕 | 免费在线观看一区 | 亚洲精品视频网 | 大尺度福利视频奶水在线 | 国产精品久久国产三级国电话系列 | 亚洲综合成人网在线观看 | 中文字幕在线观看亚洲日韩 | 免费看美女无遮掩的软件 | 91日本在线精品高清观看 |