我想在O(1)时间检查字典中是否存在元素,并在python3中使用“try / catch”块。当我尝试这样做时,我收到语法错误,我不确定原因:
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)时间检查字典?任何帮助或反馈将不胜感激
答案 0 :(得分:2)
我想避免使用
in
,因为它会检查O(N)时间。除非它在O(1)时间内检查字典?
确实如此。字典是一个专门的散列映射,因此包含检查是一个分摊的O(1)。
答案 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
从你提到"尝试/捕获"我猜你是来自Java? : - )
答案 2 :(得分:0)
我认为这是你想做的?如果你想找到Duplicate,就不需要使用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)