У меня есть список Python, который содержит только два символа, скажем, они a
и b
, и список выглядит так:
l = ['a','b','a','b','a','b','a','b','a','b','a','b','a','b','a','b']
Теперь в моем приложении у меня есть тысячииз этих списков, и они различаются по длине (обычно несколько сотен).Но их объединяет то, что у них повторяющийся паттерн (a,b)
.Этот список, например, не работает:
l_broken = ['a','b','b','a','a','b','a','b','a','a','a','b','a','b','b','a']
Все, что отличается от повторяющегося шаблона a,b
в l
, должно считаться неработающим.Даже если список не имеет четной длины, он не работает.Так что это должно быть очень строгим тестом.Но по существу, если список l
имеет длину N
, то это означает, что (a,b)
должен повторяться N/2
раз.Символы a
и b
являются единственными вещами, которые когда-либо будут появляться в этих списках, поэтому проверка этого не требуется, поскольку в этом приложении это невозможно представить, чтобы было видно что-либо еще.
Iследует сказать, что все они должны иметь первый шаблон.Я ищу эффективный способ, тест, который может определить, есть ли у каждого списка этот повторяющийся паттерн.И если нет, то выдает ошибку или что-то наподобие
assert my_fancy_test(l), 'the list does not follow the correct pattern'
Я думаю, что я ищу соответствие подпоследовательности, но мои поиски в Google заканчиваются.
РЕДАКТИРОВАТЬ:
Спасибо всем за ваши отличные решения.Я понятия не имел, что вы могли бы сделать даже половину из них.Отличный материал.В конце я добавил краткий обзор производительности, чтобы вы могли его просмотреть.