Как найти самую длинную последовательность равных элементов в последовательности? - PullRequest
0 голосов
/ 04 апреля 2020

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

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 ]

6 голосов
/ 04 апреля 2020

Поиск самой длинной группы последовательных равных значений можно выполнить с помощью 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 с - мы можем фильтровать по элементу, как

>>> max([list(group) for item, group in groupby(test_list) if item == 4], key=len)
[4, 4, 4, 4, 4, 4]
0 голосов
/ 04 апреля 2020

Возможно, есть несколько способов сделать это, но вот одна из идей. Это в частности, если вы пытаетесь найти самую длинную последовательность в целом, а не самую длинную последовательность из числа 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)

0 голосов
/ 04 апреля 2020

Это, вероятно, не самый pythoni c или самый умный код, однако он должен работать

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))
0 голосов
/ 04 апреля 2020
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...