1. 程式人生 > >python——sorted函式、sort函式以及operator.itemgetter的使用

python——sorted函式、sort函式以及operator.itemgetter的使用

sort()vs sorted():

  1. sort()是Python列表的一個內建的排序方法,list.sort() 方法排序時直接修改原列表,返回None;
  2. sorted()是Python內建的一個排序函式,它會從一個迭代器返回一個排好序的新列表。(注意:即使是不可變的元組也可以進行排序,最後返回排序後的列表)

相比於 sort(),sorted() 使用的範圍更為廣泛,但是如果不需要保留原列表,sort更有效一點。另外,sort() 只是列表的一個方法,只適用於列表,而sorted() 函式接受一切迭代器,返回新列表。

兩者的函式形式如下:

sorted(iterable[, key][, reverse]) 
list.sort(*, key=None, reverse=None)


引數說明:

key是帶一個引數的函式,返回一個值用來排序,預設為 None。

reverse表示排序結果是否反轉

示例如下:

a =(55,12,7,3,234,56,21)
#a.sort()# a 是元組,故不能用sort 進行排序
print(sorted(a))#元組也可以用sorted進行排序
#out:[3,7, 12, 21, 55, 56, 234]
 
a =[55,12,7,3,234,56,21]
print(sorted(a))
#out:[3,7, 12, 21, 55, 56, 234]
print(a)#使用sorted排序不改變原列表
#out:[55,12,7,3,234,56,21]
 
a.sort()
print(a)#a.sort() 直接修改原列表
#out:[3,7, 12, 21, 55, 56, 234]


在排序方面sorted()函式的功能非常強大,下面我們通過例子來說明:

1、對字典進行排序

mydict= {5: 'D', 7: 'B', 3: 'C', 4: 'E', 8: 'A'}
print(sorted(mydict))#按字典鍵值排序
#out:[3,4, 5, 7, 8]
print(sorted(mydict.values()))#按字典值排序
#out:['A','B', 'C', 'D', 'E']
#也可以按照下面這種方式進行排序,如果字典的值是一個列表的話,可以對列表進行多引數排序
print(sorted(mydict.items(),key=operator.itemgetter(0)))
#out:[(3,'C'), (4, 'E'), (5, 'D'), (7, 'B'), (8, 'A')]

2、對tuple組成的list進行排序

students= [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10),]
sorted(students,key=lambda student : student[2])   # sortby age
#out:[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
sorted(students,key=itemgetter(2))  # sort by age
#out:[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
sorted(students,key=itemgetter(1,2))  # sort by gradethen by age
#out:[('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]


注意多條件排序:引數key指定的函式返回一個元組,多條件排序的順序將按照元組的順序。

3、對dict組成的list進行排序

info= [{'ID':11,'name':'lili','age':20},
        {'ID':2,'name':'jobs','age':40},
        {'ID':22,'name':'aces','age':30},
        {'ID':15,'name':'bob','age':18}]

print(sorted(info,key=lambdax:x['ID'])) #sort by ID
#out:[{'ID':2, 'name': 'jobs', 'age': 40}, {'ID': 11, 'name': 'lili', 'age': 20}, {'ID':15, 'name': 'bob', 'age': 18}, {'ID': 22, 'name': 'aces', 'age': 30}]
print(sorted(info,key=itemgetter('age')))#sort by ID
#out:[{'ID':15, 'name': 'bob', 'age': 18}, {'ID': 11, 'name': 'lili', 'age': 20}, {'ID':22, 'name': 'aces', 'age': 30}, {'ID': 2, 'name': 'jobs', 'age': 40}]
 
#多級排序
print(sorted(info,key=lambdax:(x['name'],x['age'])))
print(sorted(info,key=itemgetter("name",'age')))
#out:[{'ID': 22, 'name': 'aces', 'age': 30}, {'ID': 15, 'name': 'bob', 'age': 18},{'ID': 2, 'name': 'jobs', 'age': 40}, {'ID': 11, 'name': 'lili', 'age': 20}]


相關推薦

python——sorted函式sort函式以及operator.itemgetter的使用

sort()vs sorted(): sort()是Python列表的一個內建的排序方法,list.sort() 方法排序時直接修改原列表,返回None;sorted()是Python內建的一個排序

Python中的sorted函式以及operator.itemgetter函式

文章出處 operator.itemgetter函式 operator模組提供的itemgetter函式用於獲取物件的哪些維的資料,引數為一些序號(即需要獲取的資料在物件中的序號),下面看例子。 a = [1,2,3]  >>> b=operator.i

python sorted函式以及operator.itemgetter函式

參考: 《Machine Learning In Action》第二章 ############################################################### operator.itemgetter函式: import ope

Python中的sorted函式以及operator.itemgetter函式 【轉載】

operator.itemgetter函式 operator模組提供的itemgetter函式用於獲取物件的哪些維的資料,引數為一些序號(即需要獲取的資料在物件中的序號),下面看例子。 a = [1,

sorted()sort()函式的使用

1.sort() sort()用於對列表進行排序,其語法為: list.sort(cmp=None, key=None, reverse=False) 其中,cmp是可選引數,如果指定了引數則按照指定的方法排序;key用來指定需要排序的元素;reverse為排

Python 字典(Dictionary) get()以及operator.itemgetter函式

描述 Python 字典(Dictionary) get() 函式返回指定鍵的值,如果值不在字典中返回預設值。 語法 dict.get(key, default=None) 引數 key – 字典中要查詢的鍵。 default – 如果指定鍵的值不存

Python中的sorted函數以及operator.itemgetter函數

sorting 需要 reverse bsp 根據 iter getter 多級 logs operator.itemgetter函數 operator模塊提供的itemgetter函數用於獲取對象的哪些維的數據,參數為一些序號(即需要獲取的數據在對象中的序號),下面看

python學習day15 day16 內建函式匿名函式

https://www.processon.com/view/link/5bdc4fe3e4b09ed8b0c75e81 例子: print(locals()) #返回本地作用域中的所有名字 print(globals()) #返回全域性作用域中的所有名字 global 變數 nonlocal

Python之路Python作用域匿名函式函數語言程式設計map函式filter函式reduce函式 Python之路Python作用域匿名函式函數語言程式設計map函式filter函式reduce函式

Python之路Python作用域、匿名函式、函數語言程式設計、map函式、filter函式、reduce函式 一、作用域 return 可以返回任意值例子 def test1(): print("test1") def test(): print("te

python函式高階函式裝飾器引數註解快取

函式 1. 函式的定義 由若干語句組成的語句塊、函式名稱、引數列表構成,它是組織程式碼的最小單元。 完成一定的功能。 函式也是物件,python把函式的預設值放在了屬性中,這個屬性就伴隨著這個函式物件的整個生命週期。 2. 函式的作用 結構化程

關於sizeof函式memcpy函式以及結構體關於指標的問題彙總

1、sizeof()函式用於獲取變數、型別等位元組數。但是不能通過結構體指標獲取結構體的位元組數。使用會出現錯誤; 比如: typede struct { unsigned char yuliu[5]; unsigned char port; }_stru

Python中lambda表示式reduce函式map函式zip函式

對Python這幾個常用的小函式做一個彙總學習,參考了一些資料,有不妥的地方請原諒。 1、lambda函式 lambda是Python的一個內建函式,但是比def簡單很多。lambda不同於其他函式,主體是一個表示式,在程式碼內部嵌入一個函式的定義。工程用的比較多的是程式

機器學習學習筆記之一——用python實現簡單一元函式二元函式的梯度下降

  今天開始正正經經,好好的寫機器學習的筆記。   再一次從頭翻過來學機器學習,在有一些python和大學數學的基礎下,首先要搞的果然還是梯度下降,本篇記錄的是用jupyter完成的一次作業:python實現一維陣列和二維陣列的梯度下降,目的只在於熟悉梯度下降。 第一部分

python實現列表排序sort函式,要求支援任意型別元素的排序,也支援降序

def list_sort(lt, key=None, reverse=True): a = len(lt) for i in range(a-1): for j in range(a-1-i): if key:

Machine Learning--week1 監督學習預測函式代價函式以及梯度下降演算法

Supervised Learning given labelled data to train and used to predict for regression problem and classification problem Unsupervised Le

C#建構函式操作符過載以及自定義型別轉換

構造器   構造器(建構函式)是將型別的例項初始化的特殊方法。構造器可分為例項構造器和型別構造器,本節將詳細介紹有關內容。 例項構造器   顧名思義,例項構造器的作用就是對型別的例項進行初始化。如果類沒有顯示定義任何構造器,C#編譯器會定義一個預設的無參構造器。相反,如果類

unity 所有碰撞器(觸發器),碰撞條件結果,觸發條件結果。。。以及碰撞函式觸發函式的呼叫。

文中提到Unity元件文中將碰撞體分為3個型別: Static Collider 靜態碰撞器 These are GameObjects that do not have a Rigidbody attached, but do have a Collider attached. These object

Python學習3--返回函式 匿名函式裝飾器函式

繼續學習廖雪峰教程 http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431835236741e42daf5af6514f1a8917b8aaadff3

機器學習中目標函式損失函式以及正則項的通俗解釋

目錄: 前言: 1、什麼是目標函式? 定義是:指所關心的目標與相關的因素的函式關係。舉個例子,假如我們想要預測公司樓下手抓餅店明天能賣多少張手抓餅,已知過去10天每天賣多少,以及每天的天氣情況,是否有節假日,和手抓餅店老闆和老闆娘的感情狀況,

C++之普通成員函式虛擬函式以及純虛擬函式的區別與用法要點

普通成員函式是靜態編譯的,沒有執行時多型,只會根據指標或引用的“字面值”類物件,呼叫自己的普通函式;虛擬函式為了過載和多型的需要,在基類中定義的,即便定義為空;純虛擬函式是在基類中宣告的虛擬函式,它可以再基類中有定義,且派生類必須定義自己的實現方法。 假設我們有三個類Person、Teacher