2017-01-19 6 views
1

私は繰り返しパターンを含む単語のリストを持っています。与えられた単語のリストで単語の繰り返しパターンを見つけるには?

my_lst = ['I','Love','Python','very','much','I','Love','Python','good','nice','I','Love','Python','I','Love','Python'] 

それはパターンと、カウント

['I','Love','Python'], 4 

編集を返す必要があります:パターンは、配列中の少なくとも2つの値

+3

あなたは何を試しましたか?あなたの問題は何ですか? – k0pernikus

+0

どのパターン/パターンが必要ですか?最も頻繁にですか?最も大きい?要素の順序はどうですか? – Dmitry

+0

@ k0pernikus私はPythonを初めて使っています... :-( – SubodhD

答えて

0

1つの非常に重要なものを持っている必要がありますどのように小さなまたは大きな知ることですあなたが探したいパターン。

あなたのパターンの長さを知ったら、それらの長さのバイグラムとトリグラムを作成し、カウントを確認することができます。

それを行うためのコード:

my_lst = ['I','Love','Python','very','much','I','Love','Python','good','nice','I','Love','Python','I','Love','Python'] 

min_Seq_length = 2 
max_Seq_length = 3 

def find_ngrams(input_list, n): 
    return zip(*[input_list[i:] for i in range(n)]) 

all_sequences = [] 
for seq_length in range(min_Seq_length, max_Seq_length + 1): 
    all_sequences += [val for val in find_ngrams(my_lst, seq_length)] 

print(Counter(all_sequences).most_common(1)[0]) 

出力:

(('I', 'Love', 'Python'), 4) 

すべてのnグラムを計算すると、CPUとメモリ高価であることに注意してください。

+0

しかし、「Python」という単語が隣接していれば、このコードは機能しません。例えば。 my_lst = ['I'、 'Love'、 'Python'、 'very'、 'much'、 'I'、 'Love'、 'Python'、 'good'、 'nice'、 'I'、 'Love' 、 'Python'、 'I'、 'Love'、 'Python'、 'Python']はこのリストでは機能しません。 – SubodhD

+0

その場合、Pythonは最大のパターンです。出現数は5です。なぜなら、パターンは、私たちが出力でなければならないと感じるものではないからです。それを定義する数式が必要です。 –

+0

パターンに2つ以上の値を順番に並べるような条件を追加できます。あなたのパターンを明確にする条件を明確にしたら、問題を解決するためにコードを変更することができます。 –

2

でも、私はPythonには初めてです。これは私が思いついたものです。効率的ではないが、検討する価値がある。

>>> a = ['I','Love','Python','very','much','I','Love','Python','good','nice','I','Love','Python','I','Love','Python'] 
>>> b = ' '.join(a) 
>>> print b.count(raw_input()) 
I Love Python 
4 

繰り返しの1つを見つける場合、すべての場合をforループで見つけて見つけることができます。

+0

ここではraw_input()とは何ですか? – SubodhD

+0

ああ、それはPython 2.7です。これをpython 3.xのinput()と置き換えることができます。 – Shashank

+0

これは、「I Love Python」のユーザ入力を受け取り、このパターンの数が入力リストの4であると言います。 –

関連する問題