1. 程式人生 > >Python3之字串比較——重寫cmp函式

Python3之字串比較——重寫cmp函式

由於在C ++中習慣了使用CMP函式,所以在遇到字串排序時,想當然的去使用sort(開始,結束,CMP)去對列表進行排序,但結果好像不行。

後來查閱網上資料,好像在python3中CMP函式已經被取代了。故而只能另求他法了。下面是很簡單的一個字串日期提取及根據日期排序。需求是這樣的,由於從文字中讀入的字串是無序的,但在輸出時需要按時間前後輸出。不多說,直接上程式碼。

#!/usr/bin/python
#_*_coding:utf-8_*_
import functools
import re

def cmp(str1,str2):
    day1 = (re.search(r'\d{4}_\d{2}_\d{2}', str1)).group()
    day2 = (re.search(r'\d{4}_\d{2}_\d{2}', str2)).group()
    start1 = (re.search(r'Start\d', str1)).group()
    start2 = (re.search(r'Start\d', str2)).group()

    if day1 > day2:
        return 1
    elif day1 < day2:
        return -1
    elif start1 > start2:
        return 1
    elif start1 < start2:
        return -1
    else:
        return 0
if __name__ == '__main__':
    strList = [r"STRLIST2018_07_30\Start0",
               r"STRLIST2018_05_01\Start0",
               r"STRLIST2018_06_30\Start1",
               r"STRLIST2018_05_01\Start1",
               r"STRLIST2018_05_30\Start0",
               r"STRLIST2018_06_01\Start0",
               r"STRLIST2018_06_30\Start0",
               r"STRLIST2018_05_30\Start1",
               r"STRLIST2018_07_30\Start1",
               r"STRLIST2018_06_01\Start1"
               ]
    print("Is not sorted--------------")
    for i in strList:
        print(i)
    strList = sorted(strList,key = functools.cmp_to_key(cmp))
    print("Has sorted-----------------")
    for i in strList:
        print(i)

以上為自定義排序的一個小小實現,對於自定義排序,本小白主要用於對自定義結構體的陣列,字典等的排序,以後會用於更多地方。

歡迎大家給予指導意見或者共同討論程式設計之樂趣,希望能兩三猿友,共同進步。