這里只考慮元素是具有規則性的,如:
your_list = ["a1", "a2", "a10", "b2", "b1"]
對於這個列表,如果直接使用python 內置函數 sort,或者 sorted 進行排序(二者的區別就是,前者直接修改原有列表,后者返回一個新列表,原有列表保持不變),得到結果是這樣的:
['a1', 'a10', 'a2', 'b1', 'b2']
之所以會造成這種結果,是因為在進行排序時,會對每一個字符串元素相同下標的字符根據 ascII 大小,按照指定規則要求,進行倒序或者順序進行排序,這就造成了 "a10" 排在了 "a2” 前面,通常情況,這種結果並不是我們想要的,所以我們需要想辦法把第一個字符后面的字符比對更換為整型比對即可:
print(sorted(your_list, key=lambda info: (info[0], int(info[1:]))))
這里結合了 lambda 函數進行處理,返回給 key 的是一個元組,第一個元素是第一個字符,仍然進行字符比對,第二個元素是將第二個及其后面的字符轉化為了整型的結果,最后輸出結果為:
['a1', 'a2', 'a10', 'b1', 'b2']
順利得到了我想要的結果。
如果需要進行更復雜的轉換(元素為更復雜的數據格式或者數據結構),可以將 lambda 函數轉換為自定義的函數即可,這里以實現當前需求,寫個示例:
your_list = ["a1", "a2", "a10", "b2", "b1"] def func(info): return (info[0], int(info[1:])) print(sorted(your_list, key=func))
輸出仍然為:
['a1', 'a2', 'a10', 'b1', 'b2']