python dict 兩種遍歷方式的比較
阿新 • • 發佈:2018-12-14
關於糾結dict遍歷中帶括號與不帶括號的效能問題
1 for (d,x) in dict.items():
2 print "key:"+d+",value:"+str(x)
3
4 for d,x in dict.items():
5 print "key:"+d+",value:"+str(x)
帶括號和不帶括號效能測試結果:
1 測試條數:15 2 帶括號開始時間:2012-06-14 12:13:37.375000 3 帶括號結束時間:2012-06-14 12:13:37.375000 4 時間間隔:0:00:00 5 不帶括號開始時間:2012-06-14 12:13:37.375000 6 不帶括號結束時間:2012-06-14 12:13:37.375000 7 時間間隔:0:00:00 8 9 測試條數:50 10 帶括號開始時間:2012-06-14 12:13:57.921000 11 帶括號結束時間:2012-06-14 12:13:57.921000 12 時間間隔:0:00:00 13 不帶括號開始時間:2012-06-14 12:13:57.921000 14 不帶括號結束時間:2012-06-14 12:13:57.937000 15 時間間隔:0:00:00.016000 16 測試條數:100 17 帶括號開始時間:2012-06-14 11:53:57.453000 18 帶括號結束時間:2012-06-14 11:53:57.468000 19 時間間隔:0:00:00.015000 20 不帶括號開始時間:2012-06-14 11:53:57.468000 21 不帶括號結束時間:2012-06-14 11:53:57.531000 22 時間間隔:0:00:00.063000 23 24 測試條數:150 25 帶括號開始時間:2012-06-14 12:00:54.812000 26 帶括號結束時間:2012-06-14 12:00:54.828000 27 時間間隔:0:00:00.016000 28 不帶括號開始時間:2012-06-14 12:00:54.828000 29 不帶括號結束時間:2012-06-14 12:00:54.921000 30 時間間隔:0:00:00.093000 31 32 測試條數:200 33 帶括號開始時間:2012-06-14 11:59:54.609000 34 帶括號結束時間:2012-06-14 11:59:54.687000 35 時間間隔:0:00:00.078000 36 不帶括號開始時間:2012-06-14 11:59:54.687000 37 不帶括號結束時間:2012-06-14 11:59:54.734000 38 時間間隔:0:00:00.047000 39 40 測試條數:500 41 帶括號開始時間:2012-06-14 11:54:39.906000 42 帶括號結束時間:2012-06-14 11:54:40.078000 43 時間間隔:0:00:00.172000 44 不帶括號開始時間:2012-06-14 11:54:40.078000 45 不帶括號結束時間:2012-06-14 11:54:40.125000 46 時間間隔:0:00:00.047000 47 48 測試條數:1000 49 帶括號開始時間:2012-06-14 11:54:49.171000 50 帶括號結束時間:2012-06-14 11:54:49.437000 51 時間間隔:0:00:00.266000 52 不帶括號開始時間:2012-06-14 11:54:49.437000 53 不帶括號結束時間:2012-06-14 11:54:49.609000 54 時間間隔:0:00:00.172000 55 56 測試條數:2000 57 帶括號開始時間:2012-06-14 11:54:58.921000 58 帶括號結束時間:2012-06-14 11:54:59.328000 59 時間間隔:0:00:00.407000 60 不帶括號開始時間:2012-06-14 11:54:59.328000 61 不帶括號結束時間:2012-06-14 11:54:59.687000 62 時間間隔:0:00:00.359000 63 64 測試條數:5000 65 帶括號開始時間:2012-06-14 11:55:05.781000 66 帶括號結束時間:2012-06-14 11:55:06.734000 67 時間間隔:0:00:00.953000 68 不帶括號開始時間:2012-06-14 11:55:06.734000 69 不帶括號結束時間:2012-06-14 11:55:07.609000 70 時間間隔:0:00:00.875000 71 72 測試條數:10000 73 帶括號開始時間:2012-06-14 11:55:15.656000 74 帶括號結束時間:2012-06-14 11:55:17.390000 75 時間間隔:0:00:01.734000 76 不帶括號開始時間:2012-06-14 11:55:17.390000 77 不帶括號結束時間:2012-06-14 11:55:19.109000 78 時間間隔:0:00:01.719000 79 80 測試條數:20000 81 帶括號開始時間:2012-06-14 12:19:14.921000 82 帶括號結束時間:2012-06-14 12:19:18.593000 83 時間間隔:0:00:03.672000 84 不帶括號開始時間:2012-06-14 12:19:18.593000 85 不帶括號結束時間:2012-06-14 12:19:22.218000 86 時間間隔:0:00:03.625000
我們可以看出,dict條數在200一下的時候是帶括號的效能比較高一點,但是在200條以上的資料後不帶括號的執行時間會少些.
下面是測試程式碼:
測試Code
#-- coding: utf-8 --
import datetime,codecs
dict = {} for i in xrange(0,20000): dict.setdefault("name"+str(i)) dict["name"+str(i)]="name" s=codecs.open(r'c:\\dict.txt','a', 'utf-8') def write(des): s.write(des.decode("utf-8")) write("測試條數:") write(str(len(dict))+"\r\n") write("帶括號開始時間:") a=datetime.datetime.now() s.write(str(a)+"\r\n") for (d,x) in dict.items(): print "key:"+d+",value:"+str(x) write("帶括號結束時間:") b=datetime.datetime.now() write(str(b)+"\r\n") write("時間間隔:") write(str(b-a)+"\r\n") write("不帶括號開始時間:") c=datetime.datetime.now() write(str(c)+"\r\n") for d,x in dict.items(): print "key:"+d+",value:"+str(x) write("不帶括號結束時間:") d=datetime.datetime.now() write(str(d)+"\r\n") write("時間間隔:") write(str(d-c)+"\r\n") write("\r\n") s.close()