2017-01-29 87 views
0

運行時間差我一同學爲我的測試和偶然發現了這一點:瞭解列表VS字典

的問題是:哪個算法是最快,這是最慢的

def f1(): 
    a = [] 
    for j in range(100000): 
     a.append(j*j) 

    for j in range(100000): 
     if 99999*j == a[j]: 
      print("yes") 
def f2(): 
    a = [] 
    for j in range(100000): 
     a.append(j*j) 

    for j in range(100000): 
     if 99999*j in a: 
      print("yes") 
def f3(): 
    d = {} 
    for j in range(100000): 
     d[j] = j*j 

    for j in range(100000): 
     if 99999*j in d: 
      print("yes") 

我明白F2最慢,因爲檢查的項目是在你運行在列表上的所有成員名單。

哪個運行速度更快?布爾表達式:(99999 * j == a [j])或(99999 * j在d中,其中d是字典並使用散列),爲什麼?我認爲哈希使所有東西都O(1),所以它們應該是平等的。

謝謝。

+0

在3你只檢查鍵和值不會比較 – sahama

回答

0

現在在沒有編輯的情況下3你只是檢查鍵不值,也許這是錯誤的。卜如果編輯它像

def f3(): 
    d = {} 
    for j in range(100000): 
     d[j] = j*j 
    for j in range(100000): 
     if d[j] == 99999*j: 
      print("yes") 

然後還起到1會更快

+0

我沒有完全理解你說「檢查鑰匙是什麼意思沒有價值,但是,我計時功能: F1 - 〜0.10704922676086426秒 F2 - 〜674.6455340385437秒 F3 - 〜0.11258125305175781秒 F1和F3不同......在每次迭代,我想他們想讓我們說f1是因爲它不會浪費時間在哈希上。 非常感謝你的回覆 – YonMan