Python Cookbook (1-2) 好用的容器

1. 容器:

簡單來說,容器就是一種存放資料的空間,每種容器擺放資料的方式都不一樣。 Python 的容器簡單易用,選對容器還能增進程式存取資料的效能,降低 big O。


2. deque:

deque (本人稱為雙頭 queue),有兩個重要的特性,一是可從兩頭增減元素二是可以限制元素數量。

from collections import deque
names = deque(maxlen=3)

# 連塞三個
names.append("alice")
names.append("bob")
names.append("cat")
print(names)

# 再塞一個,踢除最舊的
names.append("dog")
print(names)

# 再塞一個,這次從左邊
names.appendleft("eve")
print(names)

從左右 pop 出元素。

_ = names.pop()
_ = names.popleft()

3. heapq:

import heapq

nums = [10, 7, 1,3, 6, 2]
heapq.heapify(nums)

print(nums)
Out: [1, 3, 2, 7, 6, 10]

heapify 是堆積排序的第一步,上例 heapify 後最小的值放在最上面,所以是 min heap

形成 min heap 後我們就很容易取得最大或最小的前幾名

heapq.nsmallest(3, nums)
heapq.nlargest(3, nums)

4. 用 heapq sort 鍵值對:

test = [{"name": "a", "score":60},
        {"name": "b", "score":30},
        {"name": "c", "score":80}]

heapq.nsmallest(2, test, 
                key=lambda person: person["score"])

我們寫了一個 lambda 並要求以此為規則對 test 進行排序(想要反向排序只要加負號就行了)


Reference

[1] David Beazley, Brian K. Jones, Python Cookbook, 3e , O'Reilly Media (2014)

留言

熱門文章