python中sort()函數用于對原列表進行排序,如果指定參數,則使用比較函數指定的比較函數。
成都創新互聯公司是一家專業提供淄博企業網站建設,專注與做網站、網站建設、HTML5、小程序制作等業務。10年已為淄博眾多企業、政府機構等服務。創新互聯專業網站制作公司優惠進行中。
列表有自己的sort方法,其對列表進行原址排序,既然是原址排序,那顯然元組不可能擁有這種方法,因為元組是不可修改的。
Python由荷蘭數學和計算機科學研究學會的吉多·范羅蘇姆于1990年代初設計,作為一門叫做ABC語言的替代品。Python提供了高效的高級數據結構,還能簡單有效地面向對象編程。
一、基本形式
sorted(iterable[, cmp[, key[, reverse]]])
iterable.sort(cmp[, key[, reverse]])
參數解釋:
(1)iterable指定要排序的list或者iterable,不用多說;
(2)cmp為函數,指定排序時進行比較的函數,可以指定一個函數或者lambda函數,如:
students為類對象的list,沒個成員有三個域,用sorted進行比較時可以自己定cmp函數,例如這里要通過比較第三個數據成員來排序,代碼可以這樣寫:
students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
sorted(students, key=lambda student : student[2])
(3)key為函數,指定取待排序元素的哪一項進行排序,函數用上面的例子來說明,代碼如下:
sorted(students, key=lambda student : student[2])
key指定的lambda函數功能是去元素student的第三個域(即:student[2]),因此sorted排序時,會以students所有元素的第三個域來進行排序。
二、普通用法:
1.原址排序
1)列表有自己的sort方法,其對列表進行原址排序,既然是原址排序,那顯然元組不可能擁有這種方法,因為元組是不可修改的。
x = [4, 6, 2, 1, 7, 9]
x.sort()
print x # [1, 2, 4, 6, 7, 9]
2.副本排序
1)[:]分片方法
x =[4, 6, 2, 1, 7, 9]
y = x[ : ]
y.sort()
print y #[1, 2, 4, 6, 7, 9]
print x #[4, 6, 2, 1, 7, 9]
注意:y = x[:] 通過分片操作將列表x的元素全部拷貝給y,如果簡單的把x賦值給y:y = x,y和x還是指向同一個列表,并沒有產生新的副本。
2)sorted方法
sorted返回一個有序的副本,并且類型總是列表,如下:
x =[4, 6, 2, 1, 7, 9]
y = sorted(x)
print y #[1, 2, 4, 6, 7, 9]
print x #[4, 6, 2, 1, 7, 9]
print sorted('Python') #['P', 'h', 'n', 'o', 't', 'y']
三、高級用法
1.自定義cmp比較函數
def comp(x, y):
if x y:
return 1
elif x y:
return -1
else:
return 0
nums = [3, 2, 8 ,0 , 1]
nums.sort(comp)
print nums # 降序排序[8, 3, 2, 1, 0]
nums.sort(cmp) # 調用內建函數cmp ,升序排序
print nums # 降序排序[0, 1, 2, 3, 8]
2.自定義key和reverse
1.reverse實現降序排序,需要提供一個布爾值,默認為False(升序排列)。
2.key在使用時必須提供一個排序過程總調用的函數:
alist = [('2', '3', '10'), ('1', '2', '3'), ('5', '6', '7'), ('2', '5', '10'), ('2', '4', '10')]
# 多級排序,先按照第3個元素排序,然后按照第2個元素排序:
print sorted(alist, cmp = None, key = lambda x:(int(x[2]), int(x[1])), reverse = False)
-------------------------------------------------------------------------------------------
[('1', '2', '3'), ('5', '6', '7'), ('2', '3', '10'), ('2', '4', '10'), ('2', '5', '10')]
四、operator.itemgetter函數
operator模塊提供的itemgetter函數用于獲取對象的哪些維的數據,參數為一些序號(即需要獲取的數據在對象中的序號),下面看例子。
a = [1,2,3]
b=operator.itemgetter(1) //定義函數b,獲取對象的第1個域的值
b(a)
2
b=operator.itemgetter(1,0) //定義函數b,獲取對象的第1個域和第0個的值
b(a)
(2, 1)
要注意,operator.itemgetter函數獲取的不是值,而是定義了一個函數,通過該函數作用到對象上才能獲取值。
itemgetter在sort中的用法:
from operator import itemgetter
alist = [('2', '3', '10'), ('1', '2', '3'), ('5', '6', '7'), ('2', '5', '10'), ('2', '4', '10')]
# 多級排序,先按照第3個元素排序,然后按照第2個元素排序:
print sorted(alist, cmp = None, key = itemgetter(2, 1), reverse = False)
print sorted(alist, cmp = None, key = lambda x:itemgetter(2, 1)(x), reverse = False)
print sorted(alist, cmp = None, key = lambda x:map(int, itemgetter(2, 1)(x)), reverse = False)
--------------------------------------------------------------------------------------------------
[('2', '3', '10'), ('2', '4', '10'), ('2', '5', '10'), ('1', '2', '3'), ('5', '6', '7')]
[('2', '3', '10'), ('2', '4', '10'), ('2', '5', '10'), ('1', '2', '3'), ('5', '6', '7')]
[('1', '2', '3'), ('5', '6', '7'), ('2', '3', '10'), ('2', '4', '10'), ('2', '5', '10')]
Python中的sort()方法用于數組排序,下面以實例形式對此加以詳細說明:
一、基本形式
列表有自己的sort方法,其對列表進行原址排序,既然是原址排序,那顯然元組不可能擁有這種方法,因為元組是不可修改的。
x?=?[4,?6,?2,?1,?7,?9]x.sort()
print?x?#?[1,?2,?4,?6,?7,?9]
如果需要一個排序好的副本,同時保持原有列表不變,怎么實現呢
x?=[4,?6,?2,?1,?7,?9]
y?=?x[?:?]
y.sort()
print?y?#[1,?2,?4,?6,?7,?9]
print?x?#[4,?6,?2,?1,?7,?9]
注意:y = x[:] 通過分片操作將列表x的元素全部拷貝給y,如果簡單的把x賦值給y:y = x,y和x還是指向同一個列表,并沒有產生新的副本。
另一種獲取已排序的列表副本的方法是使用sorted函數:
x?=[4,?6,?2,?1,?7,?9]
y?=?sorted(x)
print?y?#[1,?2,?4,?6,?7,?9]
print?x?#[4,?6,?2,?1,?7,?9]
sorted返回一個有序的副本,并且類型總是列表,如下:
print?sorted('Python')?#['P',?'h',?'n',?'o',?'t',?'y']
二、自定義比較函數
可以定義自己的比較函數,然后通過參數傳遞給sort方法:
def?comp(x,?y):
if?x??y:
return?1
elif?x??y:
return?-1
else:
return?0
nums?=?[3,?2,?8?,0?,?1]
nums.sort(comp)
print?nums?#?降序排序[8,?3,?2,?1,?0]
nums.sort(cmp)?#?調用內建函數cmp?,升序排序
print?nums?#?降序排序[0,?1,?2,?3,?8]
三、可選參數
sort方法還有兩個可選參數:key和reverse
1、key在使用時必須提供一個排序過程總調用的函數:
x?=?['mmm',?'mm',?'mm',?'m'?]
x.sort(key?=?len)
print?x?#?['m',?'mm',?'mm',?'mmm']
2、reverse實現降序排序,需要提供一個布爾值:
y?=?[3,?2,?8?,0?,?1]
y.sort(reverse?=?True)
print?y?#[8,?3,?2,?1,?0]
當前名稱:soet函數python sobolset函數
瀏覽路徑:http://vcdvsql.cn/article28/doodocp.html
成都網站建設公司_創新互聯,為您提供企業建站、網站改版、手機網站建設、品牌網站制作、搜索引擎優化、電子商務
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯