2011-11-16 20 views
1

私は数ヶ月前に仕事を変更して以来、私は長い間、Pythonに慣れ親しんできました。多くの場合、perlでは、変数をチェックするために必要な値のリストがあれば(単純にリストに一致するかどうかを調べるために)、チェックするハッシュを生成する方が簡単です。そのような配列、:配列対ハッシュキーの検索

$checklist{'val1'} = undef; 
$checklist{'val2'} = undef; 
... 
if (exists $checklist{$value_to_check}) { ... } 

は明らかにこれは無用右の値の必要性のいくつかのメモリを浪費しますが、IMOは、よりefficients、配列をループするよりもコーディングが容易です。あなたがリストまたは辞書を検索している場合

今すぐpythonで、このためのコードは正確に関係なく同じです:

if value_to_check in checklist_which_can_be_list_or_dict: 
    <code> 

だからここに私の本当の質問です:perlで、ハッシュ方式でした処理の速度と配列の繰り返しの方が望ましいですが、これはPythonでも当てはまりますか?コードが同じであるとすれば、私はPythonが繰り返しのリストを作成するかどうか疑問に思っています。大きなリストの場合でも辞書メソッドを使用する必要がありますか?

+0

辞書はすべてPythonでハッシュされています – tekknolagi

+0

処理の速度が主な問題であれば、NumPyも考慮してください。 NumPyの配列は、Pythonのリストよりコンパクトです。また、NumPyを使用すると、アイテムを読み書きする際のアクセスも高速になります。 –

答えて

6

辞書はハッシュです。リストのinテストでは、チェックするためにすべての要素を調べなければなりません。in辞書のテストでは、ハッシュを使用してキーが存在するかどうかを確認します。 Pythonでは、リストを明示的にループすることはありません。

また、Pythonにはsetデータ型があります。これは、基本的に右辺の値を持たないハッシュ/ディクショナリです。あなたが望むものが何かのコレクションを作り上げることができるなら、そのコレクションに何かがあるかどうかをテストします。あなたはその物の順序やコレクションが何度もコレクションに入っているかどうか気にしません。 setはあなたが欲しいものです!