2017-10-10 22 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 

私はあなたが、Javaから来ていると思います「キャッチ/してみてください」のあなたの言及から? :-)

+0

私は「try/except」と言いましたが、よく知られていません。ご協力ありがとうございました! –

+0

問題ありません!私はtry/exceptはPython開発者の周りで非常によく知られていると思う。しかし、 'muggles'についてはわからない! –

+0

これは私の質問の正しい実装のため、答えとしてマークしていますが、@イグナシオ・バスケス - アブラムスの答えは、ハッシュテーブルをチェックするどのような状況でも使用されるべきであることに注意してください。 –

2

inはO(N)時間をチェックするので、使用しないでください。 O(1)で辞書をチェックするのでないかぎり?

です。ディクショナリは特殊なハッシュマップなので、包含チェックは償却されたO(1)です。

+0

これは知っておいてよかったです、ありがとうございます。私が前の答えを正しいものとしてマークしたにもかかわらず、この答えは、 '' in''が実際にはPython辞書のO(1)であるため、ハッシュテーブルをチェックするあらゆる状況で使用されるべきです。 –

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)