欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python列表排序用?sort()和sorted()的區(qū)別

 更新時(shí)間:2022年03月22日 09:11:46   作者:寧萌Julie  
這篇文章主要介紹了python列表排序用?sort()和sorted()的區(qū)別,主要比較?Python?中用于列表排序的兩種函數(shù)?sort()?和?sorted(),選擇合適的排序函數(shù),下文詳細(xì)內(nèi)容需要的小伙伴可以參考一下

前言:

內(nèi)容提要:本文比較了 Python 中用于列表排序的兩種函數(shù) sort() 和 sorted(),幫助您選擇合適的排序函數(shù)。

對(duì)列表排序時(shí),既可以用 List.sort(),也可以用 sorted(List),這兩個(gè)函數(shù)有什么不同呢?如何選擇?我以前常常分不清這兩個(gè)函數(shù),等到程序報(bào)錯(cuò)了,才知道 sorted 寫成 sort 了,List 不能寫在 sort() 括號(hào)里。您是否也有這個(gè)困惑呢?那就一起通過例子來熟悉這兩個(gè)函數(shù)吧,以后就知道應(yīng)該怎么使用了。

1. 是否改變?cè)斜?/h2>

首先應(yīng)用 List.sort() 對(duì)列表排序,

代碼示例如下:

letters=['a','dc','ab','D']
print('before sort: letters:',letters)
result1=letters.sort()
print('after sort: result1:',result1)
print('after sort: letters:',letters)

運(yùn)行結(jié)果為:

before sort: letters: ['a', 'dc', 'ab', 'D']
after sort: result1: None
after sort: letters: ['D', 'a', 'ab', 'dc']

可以看到,List.sort() 沒有返回值,而是直接改變了原列表。這既是優(yōu)點(diǎn)也是缺點(diǎn)。說它是優(yōu)點(diǎn)呢,有時(shí)不需要再使用原列表,直接修改原列表可以節(jié)約內(nèi)存空間,尤其當(dāng)這個(gè)列表很大時(shí)。而它的缺點(diǎn)也正是因?yàn)楦牧嗽斜恚率衷诔绦蛟O(shè)計(jì)時(shí)容易忽視這一點(diǎn),在后續(xù)程序中錯(cuò)誤地操作列表,導(dǎo)致得不到預(yù)計(jì)的結(jié)果。

再來看一下應(yīng)用 sorted(List) 對(duì)列表排序的效果,

代碼示例如下:

letters=['a','dc','ab','D']
print('before sorted: letters:',letters)
result2=sorted(letters)
print('after sorted: result2:',result2)
print('after sorted: letters:',letters)

運(yùn)行結(jié)果為:

before sorted: letters: ['a', 'dc', 'ab', 'D']
after sorted: result2: ['D', 'a', 'ab', 'dc']
after sorted: letters: ['a', 'dc', 'ab', 'D']

可以看到,sorted(List) 返回一個(gè)排序好的新列表,原列表不變。

依據(jù)上述對(duì)比,在選擇排序函數(shù)時(shí),我們需要考慮兩點(diǎn):

  • 1.是否希望改變?cè)斜?,如果是,選擇 sort()。如果原列表不能修改,選擇 sorted()。
  • 2.注意使用函數(shù)的返回值,或者說排序好的列表存在哪里。比如代碼為 list2=list1.sort() 或者 function(list1.sort()),那么 list2 其實(shí)是 None,而不是排序好的列表。同理,function() 函數(shù)的輸入也是 None。list1 才是排序好的列表。

2.參數(shù)設(shè)置:key 和 reverse

看上面例子中列表 letters 的排序結(jié)果,發(fā)現(xiàn) D 居然排在 a 的前面?這是因?yàn)?ASCII 碼中大寫英文字母排在小寫英文字母的前面。那么,如果我們想實(shí)現(xiàn)按字母順序,不區(qū)分大小寫的排序,應(yīng)該怎么辦呢?

方法:可以設(shè)置 key 參數(shù),對(duì) sort() 和 sorted() 都適用。

比如:設(shè)置key=str.lower,就是按字符的小寫字母形式排序。

代碼示例如下:

letters=['a','dc','ab','D']
letters.sort(key=str.lower)
print(letters)

運(yùn)行結(jié)果為:

['a', 'ab', 'D', 'dc']

此外,默認(rèn)是按升序排列。也可以設(shè)置reverse=True,就是按降序排列。這一參數(shù)同樣是對(duì) sort() 和 sorted() 都適用。下面的代碼示例同時(shí)設(shè)置了 key 和 reverse 參數(shù)。

letters=['a','dc','ab','D']
result=sorted(letters,key=str.lower,reverse=True)
print(result)

運(yùn)行結(jié)果為:

['dc', 'D', 'ab', 'a']

3.輸入數(shù)據(jù)類型

List.sort() 是列表對(duì)象(object)的一個(gè)方法(method),因此只能用于列表。

sorted() 函數(shù)是 Python 語言的內(nèi)置函數(shù),可以用于 iterables,包括 列表(List),元組(Tuple),字典(Dict)等等。iterable 對(duì)象有一個(gè)特點(diǎn),就是可以用在循環(huán) for 語句中(例如上面例子的列表 letters,可以用在 for 語句中:for e in letters:)。

下面我們來看看不同數(shù)據(jù)類型應(yīng)用 sorted() 函數(shù)的例子。需要注意的是,雖然 sorted() 的輸入可以有多種類型,但是輸出都是排序好的列表。

輸入為元組(Tuple)時(shí):

letters=('a','dc','ab','D')
result=sorted(letters)
print(result)

運(yùn)行結(jié)果為:

['D', 'a', 'ab', 'dc']

輸入為字符串(Str)時(shí):

letters='dasf'
result=sorted(letters)
print(result)

運(yùn)行結(jié)果為:

['a', 'd', 'f', 's']

從結(jié)果可以看出,輸入為字符串時(shí),輸出為排序好的字符列表,單個(gè)字符為列表的一個(gè)元素。

輸入為字典(Dict)時(shí):

letters={'b':1,'a':3,'d':2,'c':1}
result=sorted(letters)
print(result)

運(yùn)行結(jié)果為:

['a', 'b', 'c', 'd']

從結(jié)果可以看出,sorted() 函數(shù)輸出的結(jié)果是對(duì)letters.key() 排序得到的列表。

參考:https://docs.python.org/3/howto/sorting.html

到此這篇關(guān)于python列表排序用 sort()和sorted()的區(qū)別的文章就介紹到這了,更多相關(guān)python列表排序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論