我有一个包含重复模式的单词列表,例如
my_lst = ['I','Love','Python','very','much','I','Love','Python','good','nice','I','Love','Python','I','Love','Python']
它应该返回模式和计数
['I','Love','Python'], 4
编辑:模式应至少包含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和内存都很昂贵。