Как найти самую длинную последовательность одинаковых элементов в последовательности?

У меня есть такой список:

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]

Если нам нужна самая длинная группа последовательных 4s - мы можем фильтровать по элементу, например

>>> 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
Другие вопросы по тегам