Python sort 排序用法與範例

本篇介紹如何使用 Python sort 排序用法與範例,在寫 python 程式有時會用到 sort 排序,python 最常需要對 list 排序,如果不考慮自己寫一個排序法的話,其實可以用 python 內建提供的 sort 排序法,接下來的教學將介紹怎麼使用 python 來作 list 的排序 sort。

Python 提供兩種內建排序的函式分別是 sort()sorted(),這兩個函式用法差別在於 sort() 會直接修改原始的 list 並完成排序,sorted() 會回傳一個已排序的新 list。以下 Python 排序的用法範例將分幾部份介紹,

  • Python sort 升序/由小到大
  • Python sort 函式參數
  • Python sort 降序/由大到小
  • Python sorted 升序/由小到大
  • Python sorted 降序/由大到小
  • 按某列排序 sort by column

那我們就開始介紹 Python sort 排序吧!

Python sort 升序/由小到大

在 Python 中把一個未排序的 list 使用 sort 進行排序,預設會由小排到大(升序),
如果要由大排到小的話(降序),sort 參數請使用 reverse=True。
可以看出經過 sort 後,list1 裡的數據已經被修改成排序後的結果了。

python-sort.py
1
2
3
4
5
6
7
8
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

list1 = [4, 5, 8, 3, 7, 1, 2, 6, 10, 9]
print("before:", list1)
list1.sort()
print("result:", list1)
print("after :", list1)

結果如下:

1
2
3
before: [4, 5, 8, 3, 7, 1, 2, 6, 10, 9]
result: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
after : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Python sort 函式參數

以下為 Python sort 函式參數以及說明,

1
list.sort(cmp=None, key=None, reverse=False)

cmp︰ 指定一個比較函式的話,會使用該比較函式進行排序
key︰ 指定元素的某一列為key鍵值, 也就是按照元素的某一列來進行排序
reverse︰排序規則,reverse=True 降序,reverse=False 升序(預設)。

官方文件說明
list.sort() 的詳細細節請參考這裡

Python sort 降序/由大到小

Python sort 如果要由大排到小的話(降序),sort 參數請使用 reverse=True。

python-sort2.py
1
2
3
4
5
6
7
8
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

list1 = [4, 5, 8, 3, 7, 1, 2, 6, 10, 9]
print("before:", list1)
list1.sort(reverse=True)
print("result:", list1)
print("after :", list1)

結果如下:

1
2
3
before: [4, 5, 8, 3, 7, 1, 2, 6, 10, 9]
result: [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
after : [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

Python sorted 升序/由小到大

python sorted 用法如下,回傳的是排序好(升序)的結果,原始數據並無被修改,

python-sorted.py
1
2
3
4
5
6
7
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

list1 = [4, 5, 8, 3, 7, 1, 2, 6, 10, 9]
print("before:", list1)
print("result:", sorted(list1))
print("after :", list1)

結果如下:

1
2
3
before: [4, 5, 8, 3, 7, 1, 2, 6, 10, 9]
result: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
after : [4, 5, 8, 3, 7, 1, 2, 6, 10, 9]

Python sorted 降序/由大到小

python sorted 用法如下,回傳的是排序好(降序)的結果,原始數據並無被修改,

python-sorted2.py
1
2
3
4
5
6
7
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

list1 = [4, 5, 8, 3, 7, 1, 2, 6, 10, 9]
print("before:", list1)
print("result:", sorted(list1, reverse=True))
print("after :", list1)

結果如下:

1
2
3
before: [4, 5, 8, 3, 7, 1, 2, 6, 10, 9]
result: [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
after : [4, 5, 8, 3, 7, 1, 2, 6, 10, 9]

按某列排序 sort by column

這邊要介紹在numpy二維陣列中怎麼按某列來排序,

python3-sorted-by-column.py
1
2
3
4
5
6
7
8
9
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import numpy as np

a = np.array([[7, 5, 9],
[4, 8, 6],
[1, 2, 3]])

print(a[a[:1].argsort()])

或者分開寫,像是這樣

1
2
idx_list=a[:1].argsort()
print(a[idx_list])

或使用內建的sorted, 並且使用lambda指定按第2列排序,
詳細內容可以參考Python官方文件排序的介紹 , student_tuples sort by age 的部份,

1
2
b = np.array(sorted(a, key=lambda x:x[1]))
print(b)

結果輸出如下,按照第2列來排順序,其他列的資料也跟著一起搬移了,

1
2
3
[[1 2 3]
[7 5 9]
[4 8 6]]

其他參考
Python List sort()方法 | 菜鸟教程
https://www.runoob.com/python/att-list-sort.html
Sw@y’s Notes: [Python]如何在Python排序(Python Sorting)
http://swaywang.blogspot.com/2012/05/pythonpythonpython-sorting.html
淺談 Python 的排序 - 兩大類的部落格
https://marco79423.net/articles/%E6%B7%BA%E8%AB%87-python-%E7%9A%84%E6%8E%92%E5%BA%8F/
Python中sort、sorted高級排序技巧_謝軍的博客-CSDN博客_pythonsorted原地
https://blog.csdn.net/hduxiejun/article/details/56495729
python - Sorting arrays in NumPy by column - Stack Overflow
https://stackoverflow.com/questions/2828059/sorting-arrays-in-numpy-by-column

其它相關文章推薦
如果你想學習 Python 相關技術,可以參考看看下面的文章,
Python 新手入門教學懶人包
Python 取得鍵盤輸入 input
Python if else elif 用法教學與範例
Python for 迴圈
Python 建立多執行緒 thread
Python 讀檔,讀取 txt 文字檔
Python PIL 讀取圖片並顯示
Python OpenCV resize 圖片縮放