日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

python list.sort()方法排序一探究竟

作者:lonely-hermit 更新時間: 2022-05-13 編程語言

一、基礎

眾所周知 sort方法是給list列表排序用的,我們一般的使用方法如下

m = [10,2,3,4,5]
m.sort()
print(m)

我們就能排好序了,但是這只是升序,我們想降序怎么辦,我們只需要設置一個參數即可

m.sort(reverse=True)

二、提高

到目前為止沒什么問題,好的我們下面進行提高,我們有下面的一組數據,我們的排序方式是

年齡大的在前,年齡相同的女士優先,同樣是女士的按照姓名的升序排列,好像我們之前的那種方式失效了

class User(object):
	"""docstring for User"""
	def __init__(self, userName,age,sex):
		self.userName = userName
		self.age = age
		self.sex = sex

m = [User("liMing",12,"M"),User("liLei",12,"M"),User("liMa",14,"W"),User("mayun",15,"M")]

這時候就輪到下面這個key關鍵字出場了

m.sort(key=lambda user:-user.age)

for i in m:
	print(i.age)

我們發現這樣是年齡按照降序排列了,但是別的別沒有排啊,所以我們其實可以這樣

m.sort(key=lambda user:(-user.age,-ord(user.sex),user.userName))

for i in m:
	print(str(i.age)+"--"+i.sex+"--"+i.userName)

這樣寫一個lambda表達式就是 年齡的降序,性別女士優先,姓名的升序了,

可以說非常實用了!!!

三、進階

python2中sort函數有一個參數可以直接比較兩個值來確定誰排在前面誰排在后面,這個參數在python3中被整合到了key中,我們來看一下leetcode179題

class Solution:
    def largestNumber(self, nums: List[int]) -> str:
        res = [str(x) for x in nums]
        res.sort(reverse = True,key = functools.cmp_to_key(lambda x,y : 1 if x+y > y+x else -1))
        res = "".join(res)
        if res[0] == '0':
            res = '0'
        return res

這個題也是排序的問題,但是她的排序規則略有不同,所以我們需要像C/C++那種排序函數,提供一個排序的規則,我們就可以使用

functools.cmp_to_key

非常實用

原文鏈接:https://blog.csdn.net/weixin_43903639/article/details/123563856

欄目分類
最近更新