Python內(nèi)置的 sorted()函數(shù)可對(duì)list進(jìn)行排序:
>>> sorted([36, 5, 12, 9, 21]) [5, 9, 12, 21, 36]
可以看到,sorted()函數(shù),默認(rèn)是由小到大排序列表的元素。
>>> score = [('Alice', 72), ('Candy', 90), ('Bob', 62)] >>> sorted(score) [('Alice', 72), ('Bob', 62), ('Candy', 90)]
當(dāng)list的每一個(gè)元素又是一個(gè)容器時(shí),則會(huì)以第一個(gè)元素來(lái)排序,比如在score中,每個(gè)元素都是包含名字和成績(jī)的一個(gè)tuple,sorted()函數(shù)則按名字首字母進(jìn)行了排序并返回。
對(duì)于上述排序成績(jī)的情況,默認(rèn)是按照第一個(gè)名字進(jìn)行排序的,有沒有辦法讓sorted()函數(shù)按照成績(jī)來(lái)進(jìn)行排序呢?
如果需要按照成績(jī)高低進(jìn)行排序,需要指定排序的字段是成績(jī),sorted接受key參數(shù),用來(lái)指定排序的字段,key的值是一個(gè)函數(shù),接受待排序列表的元素作為參數(shù),并返回對(duì)應(yīng)需要排序的字段。因此,sorted()函數(shù)也是高階函數(shù)。
def k(item): return item[1] # ==> 按成績(jī)排序,成績(jī)是第二個(gè)字段 sorted(score, key=k)
得到結(jié)果:[('Bob', 62), ('Alice', 72), ('Candy', 90)] 。
如果需要倒序,指定reverse參數(shù)即可。
sorted(score, key=k, reverse=True)
得到結(jié)果:[('Candy', 90), ('Alice', 72), ('Bob', 62)] 。
對(duì)字符串排序時(shí),有時(shí)候忽略大小寫排序更符合習(xí)慣。請(qǐng)利用sorted()高階函數(shù),實(shí)現(xiàn)忽略大小寫排序的算法。
輸入:['bob', 'about', 'Zoo', 'Credit']
輸出:['about', 'bob', 'Credit', 'Zoo']
參考答案:
def k(item): return item.lower() sorted(['bob', 'about', 'Zoo', 'Credit'], key=k)
請(qǐng)驗(yàn)證,完成請(qǐng)求
由于請(qǐng)求次數(shù)過多,請(qǐng)先驗(yàn)證,完成再次請(qǐng)求
打開微信掃碼自動(dòng)綁定
綁定后可得到
使用 Ctrl+D 可將課程添加到書簽
舉報(bào)