2016-07-21 9 views
3

次のコードはうまく動作しますが、リストの理解を使用して同じロジックを実装する方法が不思議でした。ループ内のリストから辞書を作成する

また、リストの理解度を使用してパフォーマンスを改善しますか?

feature_spacedocumentの両方が比較的大きく、多くの繰り返しが実行されることです。

編集:最初は明らかにしていないことを申し訳ありませんが、feature_spacedocumentの両方がリストです。

  • document(単語が複数回存在してもよい!)
  • feature_spaceの単語のリストであるdictの理解とラベルのリスト(機能)このよう
+1

何 'document'ですか?そうでない場合はセットか辞書、それを一つにしてください。 –

+0

@MartijnPietersは私の編集を見ます。 –

答えて

3

、次のとおりです。

def get_features(document, feature_space): 
    return {w: (w in document) for w in feature_space} 

features[key] = value発現は、開始時key: value一部となり、そしてT forループの残りの部分とすべてのif文は、ネスト順に従います。

はい、すべてのfeaturesローカル名検索とdict.__setitem__呼び出しを削除したので、パフォーマンスが向上します。

documentが高速メンバシップテストを持つデータ構造であることを確認する必要があります。

def get_features(document, feature_space): 
    document = set(document) 
    return {w: (w in document) for w in feature_space} 

:それはリストである場合、その会員試験はO(1)(定数)時間がかかり、ないO(n)のリストの線形時間を確保するために、例えば、set()最初に変換しますsetで、これは今、O(K)ループの代わりに、O(KN)ループ(Nはdocumentの大きさで、Kfeature_space)の大きさである。

関連する問題