python sort 排序的使用


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 = x[:] 通過分片操作將列表x的元素全部拷貝給y,如果簡單的把x賦值給y, 即 y = x,y和x還是指向同一個列表,並沒有產生新的副本。
y.sort()
print y #[1, 2, 4, 6, 7, 9]
print x #[4, 6, 2, 1, 7, 9]

另一種獲取已排序的列表副本的方法是使用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]

在舉一個sort的使用例子

有一個列表lis = [[9,0],[7,0],[1,9],[3,0],[2,7],[5,3],[6,0],[3,4],[6,2],[5,2]]

那么如何實現 lis的排序按照第一個元素遞減,第二個元素遞增的排序規則呢?

lis = [[9,0],[7,0],[1,9],[3,0],[2,7],[5,3],[6,0],[3,4],[6,2],[5,2]]
lis = sorted(lis, key=lambda x: (-x[0], x[1])) # -x[0]表示列表第一個元素按遞減規則,x[1]符號為正, 表示列表第二個元素按遞增規則.
print lis # [[9, 0], [7, 0], [6, 0], [6, 2], [5, 2], [5, 3], [3, 0], [3, 4], [2, 7], [1, 9]]


免責聲明!

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



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