99热99这里只有精品6国产,亚洲中文字幕在线天天更新,在线观看亚洲精品国产福利片 ,久久久久综合网

歡迎加入QQ討論群258996829
麥子學(xué)院 頭像
蘋果6袋
6
麥子學(xué)院

Python學(xué)習(xí)之sort()方法詳解

發(fā)布時(shí)間:2017-01-09 23:05  回復(fù):0  查看:2430   最后回復(fù):2017-01-09 23:05  

本文和大家分享的主要是python中的sort()方法相關(guān)知識,一起來看看吧,希望對大家學(xué)習(xí)python有所幫助。

  一、基本形式

  sorted(iterable[, cmp[, key[, reverse]]])

  iterable.sort(cmp[, key[, reverse]])

  參數(shù)解釋:

  (1iterable指定要排序的list或者iterable,不用多說;

 ?。?/span>2cmp為函數(shù),指定排序時(shí)進(jìn)行比較的函數(shù),可以指定一個(gè)函數(shù)或者lambda函數(shù),如:

  students為類對象的list,沒個(gè)成員有三個(gè)域,用sorted進(jìn)行比較時(shí)可以自己定cmp函數(shù),例如這里要通過比較第三個(gè)數(shù)據(jù)成員來排序,代碼可以這樣寫:

  students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]

  sorted(students, key=lambda student : student[2])

 ?。?/span>3key為函數(shù),指定取待排序元素的哪一項(xiàng)進(jìn)行排序,函數(shù)用上面的例子來說明,代碼如下:

  sorted(students, key=lambda student : student[2])

  key指定的lambda函數(shù)功能是去元素student的第三個(gè)域(即:student[2]),因此sorted排序時(shí),會以students所有元素的第三個(gè)域來進(jìn)行排序。

  二、普通用法:

  1.原址排序

  1)列表有自己的sort方法,其對列表進(jìn)行原址排序,既然是原址排序,那顯然元組不可能擁有這種方法,因?yàn)樵M是不可修改的。

  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賦值給yy = x,yx還是指向同一個(gè)列表,并沒有產(chǎn)生新的副本。

  2sorted方法

  sorted返回一個(gè)有序的副本,并且類型總是列表,如下:

  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比較函數(shù)

  def comp(x, y):if x < y:return 1elif x > y:return -1else:return 0

  nums = [3, 2, 8 ,0 , 1]

  nums.sort(comp)print nums # 降序排序[8, 3, 2, 1, 0]

  nums.sort(cmp) # 調(diào)用內(nèi)建函數(shù)cmp ,升序排序print nums # 降序排序[0, 1, 2, 3, 8]

  2.自定義keyreverse

  1. reverse實(shí)現(xiàn)降序排序,需要提供一個(gè)布爾值, 默認(rèn)為False(升序排列)。

  2.key在使用時(shí)必須提供一個(gè)排序過程總調(diào)用的函數(shù):

  x = ['mmm', 'mm', 'mm', 'm' ]x.sort(key = len)print x # ['m', 'mm', 'mm', 'mmm']

  alist = [('2', '3', '10'), ('1', '2', '3'), ('5', '6', '7'), ('2', '5', '10'), ('2', '4', '10')]# 多級排序,先按照第3個(gè)元素排序,然后按照第2個(gè)元素排序:print sorted(alist, cmp = None, key = lambda xPython學(xué)習(xí)之sort()方法詳解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函數(shù)

  operator模塊提供的itemgetter函數(shù)用于獲取對象的哪些維的數(shù)據(jù),參數(shù)為一些序號(即需要獲取的數(shù)據(jù)在對象中的序號),下面看例子。

  a = [1,2,3]

  >>> b=operator.itemgetter(1) //定義函數(shù)b,獲取對象的第1個(gè)域的值

  >>> b(a) 2

  >>> b=operator.itemgetter(1,0) //定義函數(shù)b,獲取對象的第1個(gè)域和第0個(gè)的值

  >>> b(a)

  (2, 1)

  要注意,operator.itemgetter函數(shù)獲取的不是值,而是定義了一個(gè)函數(shù),通過該函數(shù)作用到對象上才能獲取值。

  itemgettersort中的用法:

  from operator import itemgetter

  alist = [('2', '3', '10'), ('1', '2', '3'), ('5', '6', '7'), ('2', '5', '10'), ('2', '4', '10')]

  多級排序,先按照第3個(gè)元素排序,然后按照第2個(gè)元素排序: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')]


來源:博客園

您還未登錄,請先登錄

熱門帖子

最新帖子

?