亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

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

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

瀏覽:4日期: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 編程
相關文章:
主站蜘蛛池模板: 一级特黄性色生活片一区二区 | 99国产欧美久久精品 | 久久久精 | 日本a级毛片 | 亚洲天堂三区 | 天天影视色综合 | 国产精品久久久久久小说 | 亚洲三级一区 | 喷潮白浆直流在线播放 | 国产一级三级三级在线视 | 国产高清大尺度一区二区不卡 | 久久九九久精品国产 | 亚洲福利网址 | 亚洲福利一区二区三区 | 草草久| 在线视频免费观看短视频 | 美国毛片基地a级e片 | 国产理论视频在线观看 | 午夜一级毛片不卡 | aaa黄色片 | 久久亚洲电影 | 国产成人高清一区二区私人 | 国产一区二区自拍视频 | 爱爱激情网 | 青草国产精品久久久久久 | 国产精品合集久久久久青苹果 | 欧美视频日韩视频 | 日韩不卡中文字幕 | 欧美黄色毛片 | 国产a∨一区二区三区香蕉小说 | 亚洲精品国产一区二区在线 | 在线看的毛片 | 久久对白 | 可以免费看黄的网址 | 亚洲特一级毛片 | 午夜色a大片在线观看免费 午夜色图 | 又大又粗进出白浆直流动态图 | 伊人伊成久久人综合网777 | 99国产成+人+综合+亚洲 欧美 | 国产末成年女噜噜片 | 黄色视屏免费在线观看 |