Вот один из подходов:
l = ['a','b','c','d','a','a','b','c','c','d','d','d']
seq = ['a','b','c']
sum(1 for i in range(len(l) - len(seq)-1) if l[i: i + len(seq)] == seq)
# 2
Где на каждой итерации мы сравниваем срез или окно из l
с seq
и возвращаем 1
, если они равны. Следовательно это производит следующие кусочки:
[l[i: i + len(seq)] for i in range(len(l) - len(seq)-1)]
[['a', 'b', 'c'],
['b', 'c', 'd'],
['c', 'd', 'a'],
['d', 'a', 'a'],
['a', 'a', 'b'],
['a', 'b', 'c'],
['b', 'c', 'c'],
['c', 'c', 'd']]
Или мы также можем использовать join
для преобразования обоих списков в строки и затем использовать str.count
:
''.join(l).count(''.join(seq))
# 2