2

このおそらく単純な問題について誰かの助けをいただければ幸いです。フォームに単語の長いリストがあります['word', 'another', 'word', 'and', 'yet', 'another']。これらの単語を指定したリストと比較して、最初のリストに含まれているかどうかに関係なく、ターゲットの単語を探します。

最初のリストに含まれている「検索」単語と、それらが表示される回数を出力したいと思います。私は次のようなことを試みlist(set(a).intersection(set(b)))ましたが、代わりに単語を分割して文字を比較します。

既存の長いリストと比較するために単語のリストをどのように書くことができますか?そして、どうすれば共起とその頻度を出力できますか?お手数をおかけしますが、よろしくお願いいたします。

4

2 に答える 2

7
>>> lst = ['word', 'another', 'word', 'and', 'yet', 'another']
>>> search = ['word', 'and', 'but']
>>> [(w, lst.count(w)) for w in set(lst) if w in search]
[('and', 1), ('word', 2)]

このコードは、基本的に の一意の要素を反復処理し、lst要素がsearchリストにある場合は、出現回数とともにその単語を結果のリストに追加します。

于 2013-03-14T10:33:54.907 に答える
4

単語のリストを次のように前処理しますCounter

from collections import Counter
a = ['word', 'another', 'word', 'and', 'yet', 'another']
c = Counter(a)
# c == Counter({'word': 2, 'another': 2, 'and': 1, 'yet': 1})

これで、単語の新しいリストを反復処理して、それらがこのカウンター辞書に含まれているかどうかを確認できます。値は、元のリストに出現する数を示します。

words = ['word', 'no', 'another']

for w in words:
    print w, c.get(w, 0)

これは次を印刷します:

word 2
no 0
another 2

またはリストに出力します:

[(w, c.get(w, 0)) for w in words]
# returns [('word', 2), ('no', 0), ('another', 2)]
于 2013-03-14T10:32:03.800 に答える