1. 程式人生 > >Python小技巧 3:列表項的排序

Python小技巧 3:列表項的排序

典型程式碼1:

data_list = [6, 9, 1, 3, 0, 10, 100, -100]
data_list.sort()
print(data_list)

輸出1:
[-100, 0, 1, 3, 6, 9, 10, 100]

典型程式碼2:
data_list = [6, 9, 1, 3, 0, 10, 100, -100]
data_list_copy = sorted(data_list)
print(data_list)
print(data_list_copy)

輸出2:

[6, 9, 1, 3, 0, 10, 100, -100]
[-100, 0, 1, 3, 6, 9, 10, 100]

應用場景

需要對列表中的項進行排序時使用。其中典型程式碼1是使用的列表自身的一個排序方法sort,這個方法自動按照升序排序,並且是原地排序,被排序的列表本身會被修改;典型程式碼2是呼叫的內建函式sort,會產生一個新的經過排序後的列表物件,原列表不受影響。這兩種方式接受的引數幾乎是一樣的,他們都接受一個key引數,這個引數用來指定用物件的哪一部分為排序的依據:

data_list = [(0, 100), (77, 34), (55, 97)]
data_list.sort(key=lambda x: x[1]) # 我們想要基於列表項的第二個數進行排序
print(data_list)

>>> [(77, 34), (55, 97), (0, 100)]

另外一個經常使用的引數是reverse,用來指定是否按照倒序排序,預設為False:
data_list = [(0, 100), (77, 34), (55, 97)]
data_list.sort(key=lambda x: x[1], reverse=True) # 我們想要基於列表項的第二個數進行排序,並倒序
print(data_list)
>>> [(0, 100), (55, 97), (77, 34)]

帶來的好處

1. 內建的排序方法,執行效率高,表達能力強,使程式碼更加緊湊,已讀

2. 靈活的引數,用於指定排序的基準,比在類似於Java的語言中需要寫一個comparator要方便很多

其它說明

1. sorted內建函式比列表的sort方法要適用範圍更廣泛,它可以對除列表之外的可迭代資料結構進行排序;

2. list內建的sort方法,屬於原地排序,理論上能夠節省記憶體的消耗;