1. 程式人生 > >python dict 兩種遍歷方式的比較

python dict 兩種遍歷方式的比較

關於糾結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()