Как найти самую длинную последовательность одинаковых элементов в последовательности?
У меня есть такой список:
test_list = [1, 43, 23, 4, 4, 4, 4, 4, 4, 2, 4, 4]
Наибольшая последовательность числа 4
составляет 6
элементы, как я могу реализовать алгоритм для подсчета этого?
Я пробовал это, и в результате он возвращает 8:
for item in test_list:
if item == 4:
count += 1
* количество заранее определено в более крупном алгоритме, который я реализовал
4 ответа
Поиск самой длинной группы последовательных одинаковых значений можно выполнить с помощью itertools.groupby
& max
>>> from itertools import groupby
>>> test_list = [1, 43, 23, 4, 4, 4, 4, 4, 4, 2, 4, 4]
>>> max([list(group) for _, group in groupby(test_list)], key=len)
[4, 4, 4, 4, 4, 4]
Если нам нужна самая длинная группа последовательных 4
s - мы можем фильтровать по элементу, например
>>> max([list(group) for item, group in groupby(test_list) if item == 4], key=len)
[4, 4, 4, 4, 4, 4]
Вероятно, есть несколько способов сделать это, но вот одна идея. Это особенно важно, если вы пытаетесь найти самую длинную последовательность в целом, а не самую длинную последовательность из числа 4.
longest_val <- 0
longest_count <- 0
prev_item <- Null
count <- 0
for all items in list
if item == prev_item
count++
if count > longest_count
longest_count <- count
longest_val <- item
else
count <- 0
prev_item <- item
(PS Это псевдокод, а не Python)
Вероятно, это не самый питонический или умный код, но он должен работать.
test_list = [1, 43, 23, 4, 4, 4, 4, 4, 4, 2,1,4,4]
max_seq=0
count=1
for index, item in enumerate(test_list):
if index < len(test_list)-1:
if item == test_list[index+1]:
count += 1
print(count)
else:
if count > max_seq:
max_seq = count
count = 1
print('longest sequence: ' + str(max_seq))
max_len = -1
count = 0
for x in test_list:
if x == 4:
count += 1
else:
if count > max_len:
max_len = count
count = 0