sort和sorted區別----引子:多維列表,如何實現第一個元素升序,第二個元素降序


一、列表內建方法--sort()

作用就地對列表排序(直接在原列表上做排序)

語法

  list.sort(func=None, key=None, reverse=False)

  • 當reverse=False時:正向排序;當reverse=True時:逆向排序。默認為False。
  • 執行完后會改變原來的list,如果你不需要原來的list,這種效率稍微高點
  • 該方法沒有返回值

例子

>>> arr = [2,8,4,6,9,1,3]
>>> arr.sort()
>>> arr
[1, 2, 3, 4, 6, 8, 9]

  

 

二、內建函數sorted()

作用:對可迭代對象排序,返回一個新的已經排序好的list

差別:

  • sorted()不會改變原來的list,而是會返回一個新的已經排序好的list
  • list.sort()方法只是應用在 list 上的方法,而sorted()可用於任何一個可迭代對象

語法:

  sorted(iterable, key=None, reverse=False)

  • 當reverse=False時:為正向排序;當reverse=True時:為反向排序。默認為False。
  • 執行完后返回一個新的排序好的list

例子

>>> arr = (3,6,7,2,1,4)
>>> sorted(arr)
[1, 2, 3, 4, 6, 7]

 

 

三、高級用法

參數key:

參數key:帶一個參數的函數(排序時,會依次傳入列表的每一項,作為該函數的參數)。該函數用於在比較排序之前進行的操作

例子:

每個字符串比較之前,需要統一小寫

>>> test=["A","a","E","W","o"] >>> test.sort() >>> test ['A', 'E', 'W', 'a', 'o']
>>> test.sort(key=lambda x:x.lower())
>>> test
['A', 'a', 'E', 'o', 'W']

 

對於復雜的對象,使用對象的下標作為key。

例子:

>>> student_tuples = [ ... ('john', 'A', 15), ... ('jane', 'B', 12), ... ('dave', 'B', 10), ... ] >>> sorted(student_tuples, key=lambda student: student[2])   # sort by age
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

 

使用對象的屬性進行操作:

>>> class Student: ... def __init__(self, name, grade, age): ... self.name = name ... self.grade = grade ... self.age = age ... def __repr__(self): ... return repr((self.name, self.grade, self.age)) >>>
>>> student_objects = [ ... Student('john', 'A', 15), ... Student('jane', 'B', 12), ... Student('dave', 'B', 10), ... ] >>> sorted(student_objects, key=lambda student: student.age)   # sort by age
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

 

 

重點來了!

1.多維數組,如何在按照第一個元素排序的基礎上,再按第二個關鍵字進行排序?

>>> arr = [('d',3),('a',5),('d',1),('c',2),('d',2)] >>> sorted(arr, key = lambda x:(x[0],x[1])) [('a', 5), ('c', 2), ('d', 1), ('d', 2), ('d', 3)]

 

2.多維數組,如何實現第一個元素按升序,第二個元素按降序來排列?

>>> arr = [('d',3),('a',5),('d',1),('c',2),('d',2)]
>>> sorted(arr, key=lambda x:(x[0], -int(x[1])))
[('a', 5), ('c', 2), ('d', 3), ('d', 2), ('d', 1)]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM