from random import randint
defload_list_data
(total_nums, target_nums):
""" 從檔案中讀取資料,以list的方式返回
:param total_nums: 讀取的數量
:param target_nums: 需要查詢的資料的數量
"""all_data =
target_data =
file_name = "g:/慕課網課程/advancepython/fbobject_idnew.txt"
with open(file_name, encoding="utf8", mode="r") as f_open:
for count, line in enumerate(f_open):
if count < total_nums:
else:
break
for x in range(target_nums):
random_index = randint(0, total_nums)
if all_data[random_index] not
in target_data:
if len(target_data) == target_nums:
break
return all_data, target_data
defload_dict_data
(total_nums, target_nums):
""" 從檔案中讀取資料,以dict的方式返回
:param total_nums: 讀取的數量
:param target_nums: 需要查詢的資料的數量
"""all_data = {}
target_data =
file_name = "g:/慕課網課程/advancepython/fbobject_idnew.txt"
with open(file_name, encoding="utf8", mode="r") as f_open:
for count, line in enumerate(f_open):
if count < total_nums:
all_data[line] = 0
else:
break
all_data_list = list(all_data)
for x in range(target_nums):
random_index = randint(0, total_nums-1)
if all_data_list[random_index] not
in target_data:
if len(target_data) == target_nums:
break
return all_data, target_data
deffind_test
(all_data, target_data):
#測試執行時間
test_times = 100
total_times = 0
import time
for i in range(test_times):
find = 0
start_time = time.time()
for data in target_data:
if data in all_data:
find += 1
last_time = time.time() - start_time
total_times += last_time
return total_times/test_times
if __name__ == "__main__":
# all_data, target_data = load_list_data(10000, 1000)
# all_data, target_data = load_list_data(100000, 1000)
# all_data, target_data = load_list_data(1000000, 1000)
# all_data, target_data = load_dict_data(10000, 1000)
# all_data, target_data = load_dict_data(100000, 1000)
# all_data, target_data = load_dict_data(1000000, 1000)
all_data, target_data = load_dict_data(2000000, 1000)
last_time = find_test(all_data, target_data)
#dict查詢的效能遠遠大於list
#在list中隨著list資料的增大 查詢時間會增大
#在dict中查詢元素不會隨著dict的增大而增大
print(last_time)
#1. dict的key或者set的值 都必須是可以hash的
#不可變物件 都是可hash的, str, fronzenset, tuple,自己實現的類 __hash__
#2. dict的記憶體花銷大,但是查詢速度快, 自定義的物件 或者python內部的物件都是用dict包裝的
# 3. dict的儲存順序和元素新增順序有關
# 4. 新增資料有可能改變已有資料的順序
Python dict字典的使用
為記錄學習的過程 python中 雜湊值 hash 在字典dict中 每個鍵值對的key 儲存到 記憶體中都是以雜湊值 位址值key 的方式儲存的 每次獲取相同值的雜湊值都是相等的 這樣保證了一致性 假如重啟專案 則雜湊值會發生變化 如果是數字型別的雜湊值 hash 123455 數字在python...
python dict的注意事項
1.key不能用list和set 由於列表是易變的,故不可做key。如果使用會報錯 但是元組可以做key 2.遍歷方法 for key in somedict pass 速度快,但是如果要刪除元素會導致錯誤,出錯情況如下 這裡初始化乙個dict d 本意是遍歷dict,發現元素的值是0的話,就刪掉 ...
Python dict字典排序和多條件排序
利用lambda實現排序 要實現多條件排序,只需要依次指定排序的標準,具體實現如下 counter counter list sorted counter.iteritems key lambda x x 1 reverse true 根據value的大小排序 你 3 是 1 不是 1 counte...