如何在给定的单词列表中找到单词的重复模式?

时间:2017-01-19 12:59:24

标签: python python-3.x

我有一个包含重复模式的单词列表,例如

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

它应该返回模式和计数

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

编辑:模式应至少包含2个值

2 个答案:

答案 0 :(得分: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 :(得分:0)

一个非常重要的事情是要知道你想要寻找的模式的大小。

一旦你知道你的图案长度,你可以创建这些长度的二元组和三元组并检查数量。

执行此操作的代码:

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-gram的CPU和内存都很昂贵。