2017-08-16 4 views
0

に基づいてフィルタートークンは、私は、異なる周波数で複数のトークンを含むリストオブジェクトに取り組んでいた周波数

from collections import Counter 

s = {'book', 
'car', 
'bird', 
'cup', 
'book', 
'cup', 
'river'} 

print(Counter(s)) 

[('book': 2), ('cup': 2), ('river': 1), ('car': 1), ('bird': 1)] 

私は、二回登場しているトークンのみが選択されることにより、フィルタを設定したいと私の使用次のコードは、私の現在の試行

select = [word for word in s if list(s).count(word) >= 2] 
select 

に私はそれが非常に簡単だと思ったが、私はから任意の出力ませんでした「を選択します。」私のコードには何が問題になりましたか?場合s

+4

あなたは*一意的な値を持つ*セット*を表示します。 [mcve]を与えてください。スタックスニペットはHTML/CSS/JS用であり、Pythonをサポートしていないことに注意してください。 – jonrsharpe

答えて

1

は(あなたの例のコードでは、あなたの質問に書いたように、ではない)リストとないように設定されている、あなたはトップXの要素を取得するためにCounterオブジェクトのmost_common機能を使用することができますあなたのリストに:

In [67]: s = ['book', 
    ...: 'car', 
    ...: 'bird', 
    ...: 'cup', 
    ...: 'book', 
    ...: 'cup', 
    ...: 'river'] 

In [68]: s 
Out[68]: ['book', 'car', 'bird', 'cup', 'book', 'cup', 'river'] 

In [69]: c = Counter(s) 

In [70]: c.most_common(2) 
Out[70]: [('book', 2), ('cup', 2)] 

あなたが使用することができますY回以上現れる要素取得したい場合:

In [71]: [x[0] for x in c.items() if x[1] >= 2] 
Out[71]: ['book', 'cup'] 

x[0]を項目(FですROMリスト)とx[1]は、周波数です

+0

これは私が望む理由ではありません。 'most_common()'はそれらをランク付けするだけです。 –

+0

回答の更新を確認してください – Dekel

+0

@ChrisT。あなたは更新をチェックしましたか? – Dekel