2015年3月22日 星期日

[python] 查詢變數集中是否存在特定變數


我想程式稍微熟的用者應該都清楚,

若在LIST中查詢字串是相當慢的,

畢竟他是逐一筆對結果是否符合,

如果要加速檢查是否在資料集中就必須用到特定資料格式。


而大多朋友都說在python中是SET查詢速度最快,

因為set格式就是用來做集合處理的,

而我平常都是用字典在查詢,(非主流被質疑)

雖然和字典原本功用有點偏離,

但在好奇心趨使下做了以下測試。

測試方法:

1. 查詢字串在DICT中的效率
2. 查詢字串在SET中的效率

timeit.timeit(stmt='999 in box', setup='box=dict([(str(i),None)for i in xrange(100000)])', number=10000000)

0.34860

timeit.timeit(stmt='999 in box', setup='box=set(range(100000))', number=10000000)

0.49215

結論:

在字典DICT中查找特定字串略快於SET,

雖然我不是完全了解DICT和SET在記憶體中的結構差異,

但這邊可以看出來,在DICT中查表效率較佳。

只不過DICT結構還要在塞個值,

可能較不方便, (需要塞個空值來減少記憶體消耗)

且對於Review Code的維護者會造成不小的困惑。

沒有留言:

張貼留言