python以其優(yōu)美的語法和方便的內置數據結構,贏得了不少程序員的親睞。
其中有個很有用的數據結構,就是字典(dict),使用非常簡單。說到遍歷一個dict結構,我想大多數人都會想到 for key in dictobj 的方法,確實這個方法在大多數情況下都是適用的。但是并不是完全安全,請看下面這個例子:
另一篇:dict 兩種遍歷方式的性能對比
關于糾結dict遍歷中帶括號與不帶括號的性能問題
帶括號和不帶括號性能測試結果:
測試條數:50
帶括號開始時間:2012-06-14 12:13:57.921000
帶括號結束時間:2012-06-14 12:13:57.921000
時間間隔:0:00:00
不帶括號開始時間:2012-06-14 12:13:57.921000
不帶括號結束時間:2012-06-14 12:13:57.937000
時間間隔:0:00:00.016000
測試條數:100
帶括號開始時間:2012-06-14 11:53:57.453000
帶括號結束時間:2012-06-14 11:53:57.468000
時間間隔:0:00:00.015000
不帶括號開始時間:2012-06-14 11:53:57.468000
不帶括號結束時間:2012-06-14 11:53:57.531000
時間間隔:0:00:00.063000
測試條數:150
帶括號開始時間:2012-06-14 12:00:54.812000
帶括號結束時間:2012-06-14 12:00:54.828000
時間間隔:0:00:00.016000
不帶括號開始時間:2012-06-14 12:00:54.828000
不帶括號結束時間:2012-06-14 12:00:54.921000
時間間隔:0:00:00.093000
測試條數:200
帶括號開始時間:2012-06-14 11:59:54.609000
帶括號結束時間:2012-06-14 11:59:54.687000
時間間隔:0:00:00.078000
不帶括號開始時間:2012-06-14 11:59:54.687000
不帶括號結束時間:2012-06-14 11:59:54.734000
時間間隔:0:00:00.047000
測試條數:500
帶括號開始時間:2012-06-14 11:54:39.906000
帶括號結束時間:2012-06-14 11:54:40.078000
時間間隔:0:00:00.172000
不帶括號開始時間:2012-06-14 11:54:40.078000
不帶括號結束時間:2012-06-14 11:54:40.125000
時間間隔:0:00:00.047000
測試條數:1000
帶括號開始時間:2012-06-14 11:54:49.171000
帶括號結束時間:2012-06-14 11:54:49.437000
時間間隔:0:00:00.266000
不帶括號開始時間:2012-06-14 11:54:49.437000
不帶括號結束時間:2012-06-14 11:54:49.609000
時間間隔:0:00:00.172000
測試條數:2000
帶括號開始時間:2012-06-14 11:54:58.921000
帶括號結束時間:2012-06-14 11:54:59.328000
時間間隔:0:00:00.407000
不帶括號開始時間:2012-06-14 11:54:59.328000
不帶括號結束時間:2012-06-14 11:54:59.687000
時間間隔:0:00:00.359000
測試條數:5000
帶括號開始時間:2012-06-14 11:55:05.781000
帶括號結束時間:2012-06-14 11:55:06.734000
時間間隔:0:00:00.953000
不帶括號開始時間:2012-06-14 11:55:06.734000
不帶括號結束時間:2012-06-14 11:55:07.609000
時間間隔:0:00:00.875000
測試條數:10000
帶括號開始時間:2012-06-14 11:55:15.656000
帶括號結束時間:2012-06-14 11:55:17.390000
時間間隔:0:00:01.734000
不帶括號開始時間:2012-06-14 11:55:17.390000
不帶括號結束時間:2012-06-14 11:55:19.109000
時間間隔:0:00:01.719000
測試條數:20000
帶括號開始時間:2012-06-14 12:19:14.921000
帶括號結束時間:2012-06-14 12:19:18.593000
時間間隔:0:00:03.672000
不帶括號開始時間:2012-06-14 12:19:18.593000
不帶括號結束時間:2012-06-14 12:19:22.218000
時間間隔:0:00:03.625000
我們可以看出,dict條數在200一下的時候是帶括號的性能比較高一點,但是在200條以上的數據后不帶括號的執(zhí)行時間會少些.
下面是測試代碼:
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()
中文亂碼問題有沒有很好的解決辦法....?
新聞熱點
疑難解答
圖片精選