【问题标题】:Python 3.6.3 KeyErrorPython 3.6.3 键错误
【发布时间】:2017-10-10 02:28:21
【问题描述】:

我想用 python3 中的“try/catch”块在 O(1) 时间内检查字典中是否存在元素。当我尝试这样做时,我得到一个语法错误,我不知道为什么:

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) 时间内检查字典?任何帮助或反馈将不胜感激

【问题讨论】:

    标签: python-3.6


    【解决方案1】:

    我想避免使用in,因为它会检查 O(N) 时间。除非它在 ​​O(1) 时间内检查字典?

    确实如此。字典是一个专门的 hashmap,所以包含检查是一个摊销的 O(1)。

    【讨论】:

    • 很高兴知道这一点,谢谢。应该注意的是,虽然我将前面的答案标记为正确,但在任何情况下都应该使用这个答案来检查哈希表,因为in 实际上对于 python 字典来说是 O(1)。
    【解决方案2】:

    语法应该是:

    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? :-)

    【讨论】:

    • 好吧,我会说“try/except”,但这并不为人所知。感谢您的帮助!
    • 没问题!我认为 try/except 在 python 开发人员中非常有名。不过不确定“麻瓜”!
    • 我将其标记为答案,因为我的问题的正确实现,但应注意@Ignacio Vazquez-Abrams 答案应用于检查哈希表的任何情况
    • 同意。我也给 @IgnacioVazquez-Abrams +1 以教我一些新东西。
    【解决方案3】:

    我想这就是你想要做的?如果你想找到 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-06
      • 1970-01-01
      • 2018-05-22
      • 1970-01-01
      相关资源
      最近更新 更多