2017-10-10 134 views
0

我想通過python3中的「try/catch」塊檢查O(1)時間字典中存在的元素。當我嘗試這樣做,我得到一個語法錯誤,我不知道爲什麼:Python 3.6.3 KeyError

try a_dict[i]: 
    print(i) 
except KeyError: 
    a_dict[i] = ... #some item 

爲了簡單起見,讓我們說,我有一個檢查陣列中的一個重複的功能,我有這個功能目前正使用的從上面的邏輯:

def hasDuplicate(a): 
    a_dict = dict() 
    for i in a: 
     # logic from above 
     try a_dict[i]: 
      print(i) 
     except KeyError: 
      a_dict[i] = True 
     # end of logic from above 
    return -1 

我會從try語句行上得到語法錯誤。

我想避免使用in,因爲它檢查O(N)時間。除非它在O(1)時間檢查字典?任何幫助或反饋,將不勝感激

回答

1

的語法應爲:

def hasDuplicate(a): 
    a_dict = dict() 
    for i in a: 
     # logic from above 
     try: 
      print(a_dict[i]) 
     except KeyError: 
      a_dict[i] = True 
     # end of logic from above 
    return -1 

從你提「的try/catch」我猜你是從Java來? :-)

+0

那麼我會說「嘗試/除外」,但那不是衆所周知的。感謝您的幫助! –

+0

沒問題!我認爲try/except在python開發人員中非常有名。不知道'麻瓜'雖然! –

+0

我將此標記爲答案,因爲我的問題正確執行,但應該注意的是@Ignacio Vazquez-Abrams答案應該用於檢查散列表 –

2

我想避免使用in,因爲它檢查O(N)時間。除非它在O(1)時間檢查字典?

它的確如此。字典是一個專門的哈希映射,所以遏制檢查是一個攤銷O(1)。

+0

這很高興知道,謝謝。應該注意的是,儘管我將前面的答案標記爲正確,但在任何情況下都應該使用這個答案來檢查散列表,因爲''in'''實際上是O(1)for python dictionaries。 –

0

我想這就是你想要做的?如果你想查找重複,則不需要使用try/catch。

def hasDuplicate(a): 
    a_dict = dict() 
    for i in a: 
     # logic from above 
     try: 
     if a_dict[i]: 
      print(i) 
     except KeyError: 
     a_dict[i] = True 
     # end of logic from above 
    return -1 


print(hasDuplicate([1, 2, 3, 4, 1])) //print duplicate value (i.e. 1 and will return -1)