list dict 性能测试
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                list dict 性能测试
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                
                            
                            
                            from random import randintdef load_list_data(total_nums, target_nums):"""從文件中讀取數據,以list的方式返回:param total_nums: 讀取的數量:param target_nums: 需要查詢的數據的數量"""all_data = []target_data = []file_name = "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.append(line)else:breakfor x in range(target_nums):random_index = randint(0, total_nums)if all_data[random_index] not in target_data:target_data.append(all_data[random_index])if len(target_data) == target_nums:breakreturn all_data, target_datadef load_dict_data(total_nums, target_nums):"""從文件中讀取數據,以dict的方式返回:param total_nums: 讀取的數量:param target_nums: 需要查詢的數據的數量"""all_data = {}target_data = []file_name = "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] = 0else:breakall_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:target_data.append(all_data_list[random_index])if len(target_data) == target_nums:breakreturn all_data, target_datadef find_test(all_data, target_data):#測試運行時間test_times = 100total_times = 0import timefor i in range(test_times):find = 0start_time = time.time()for data in target_data:if data in all_data:find += 1last_time = time.time() - start_timetotal_times += last_timereturn total_times/test_timesif __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)
不可變對象 都是可hash的, str, fronzenset, tuple,自己實現的類 __hash__ dict的內存花銷大,但是查詢速度快, 自定義的對象 或者python內部的對象都是用dict包裝的
                        
                        
                        不可變對象 都是可hash的, str, fronzenset, tuple,自己實現的類 __hash__ dict的內存花銷大,但是查詢速度快, 自定義的對象 或者python內部的對象都是用dict包裝的
查找效率:set>dict>list
單次查詢中:看來list 就是O(n)的;而set做了去重,本質應該一顆紅黑樹(猜測,STL就是紅黑樹),復雜度O(logn);dict類似對key進行了hash,然后再對hash生成一個紅黑樹進行查找,其查找復雜其實是O(logn),并不是所謂的O(1)。O(1)只是理想的實現,實際上很多hash的實現是進行了離散化的。dict比set多了一步hash的過程,so 它比set慢,不過差別不大。
轉載于:https://www.cnblogs.com/richiewlq/p/11075266.html
總結
以上是生活随笔為你收集整理的list dict 性能测试的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 从国内的996,到美国的朝9晚5,真的这
- 下一篇: 传世的关系模型,巧夺天工的分布式数据库设
