Python基礎:字典(dict)與集合
- 2020 年 1 月 16 日
- 筆記
查找場景下與列表的性能對比
字典與集合之所以高效的原因是:內部結構都是一張哈希表。
平均情況下插入、查找和刪除的時間複雜度為 O(1).
假設有數量100,000的產品列表:
import time id = [x for x in range(0, 100000)] price = [x for x in range(200000, 300000)] products = list(zip(id, price)) #products # [(0, 200000), (1, 200001)....(99999, 299999)]
要統計出總共有多少種不同的價格,分別用列表list與集合set來作為存儲的數據結構,來對比下性能。
用列表作為數據結構:
# # 計算列表版本的時間 # list version def find_unique_price_using_list(products): unique_price_list = [] for _, price in products: # A if price not in unique_price_list: #B unique_price_list.append(price) return len(unique_price_list) start_using_list = time.perf_counter() find_unique_price_using_list(products) end_using_list = time.perf_counter() print("time elapse using list: {}".format(end_using_list - start_using_list)) #time elapse using list: 53.206719899999996
用集合作為數據結構:
# # 計算集合版本的時間 # set version def find_unique_price_using_set(products): unique_price_set = set() for _, price in products: unique_price_set.add(price) return len(unique_price_set) start_using_set = time.perf_counter() find_unique_price_using_set(products) end_using_set = time.perf_counter() print("time elapse using set: {}".format(end_using_set - start_using_set)) #time elapse using set: 0.009022799999996778
從結果可以看出,性能差異非常大,使用合適的數據結構非常重要。
Dict與Set基礎
- 集合不支援索引操作
- 判斷元素是否在dict/set中用 in 操作符
dict1 = {'a':1,'b':2} print('a' in dict1) #True print(1 in dict1) #False set1 = {'a','b','c'} print(1 in set1) #False print('b' in set1) #True
3.集合的pop()方法是隨機返回一個元素,並把集合中的該元素刪除
4.集合與字典的排序
#字典排序 d = {'b': 1, 'a': 2, 'c': 10} d_sorted_by_key = sorted(d.items(), key=lambda x: x[0]) # 根據字典鍵的升序排序 d_sorted_by_value = sorted(d.items(), key=lambda x: x[1]) # 根據字典值的升序排序 d_sorted_by_key [('a', 2), ('b', 1), ('c', 10)] d_sorted_by_value [('b', 1), ('a', 2), ('c', 10)] #集合排序 s = {3, 4, 2, 1} sorted(s) # 對集合的元素進行升序排序 [1, 2, 3, 4]