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

學無先后,達者為師

網站首頁 編程語言 正文

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

作者:寧萌Julie ? 更新時間: 2022-05-23 編程語言

前言:

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

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

1. 是否改變原列表

首先應用 List.sort() 對列表排序,

代碼示例如下:

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

運行結果為:

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

可以看到,List.sort() 沒有返回值,而是直接改變了原列表。這既是優點也是缺點。說它是優點呢,有時不需要再使用原列表,直接修改原列表可以節約內存空間,尤其當這個列表很大時。而它的缺點也正是因為改了原列表,新手在程序設計時容易忽視這一點,在后續程序中錯誤地操作列表,導致得不到預計的結果。

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

代碼示例如下:

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

運行結果為:

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

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

依據上述對比,在選擇排序函數時,我們需要考慮兩點:

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

2.參數設置:key 和 reverse

看上面例子中列表 letters 的排序結果,發現 D 居然排在 a 的前面?這是因為 ASCII 碼中大寫英文字母排在小寫英文字母的前面。那么,如果我們想實現按字母順序,不區分大小寫的排序,應該怎么辦呢?

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

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

代碼示例如下:

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

運行結果為:

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

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

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

運行結果為:

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

3.輸入數據類型

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

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

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

輸入為元組(Tuple)時:

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

運行結果為:

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

輸入為字符串(Str)時:

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

運行結果為:

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

從結果可以看出,輸入為字符串時,輸出為排序好的字符列表,單個字符為列表的一個元素。

輸入為字典(Dict)時:

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

運行結果為:

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

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

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

原文鏈接:https://blog.csdn.net/applebear1123/article/details/123645126

欄目分類
最近更新