найти наибольшую последовательность повторяющихся чисел в списке - PullRequest
0 голосов
/ 09 октября 2019

Проблема, которую нужно решить, - найти наибольшую последовательность повторяющихся чисел в списке. Например, если список был [2,3,4,4,4,5,4,7,6], и я искал наибольшую последовательность из 4, я бы возвратил 3.

До сих пор я только придумал цикл, который подсчитывает число указанныхчисло в ряду, но вы должны учитывать другие числа, а также есть способ сравнить, скажем, 3 "4" подряд против 2 "4". Любая помощь будет оценена

def find(list):
    x = [2,3,4,4,5,5,5,5,6,7,8]  
    print(find(x))

приведенный выше код является только основной версткой. Мне не нужен ответ на всю функцию, а только основная логика и объяснения

Ответы [ 2 ]

0 голосов
/ 09 октября 2019

Вам необходимо отслеживать две переменные: текущий счет (count) последовательных значений и максимальный счет (max_count). Когда вы наблюдаете другое значение, вы сбрасываете count, обновляете max_count и продолжаете цикл.

def get_longest_seq(l, val):
  count = 0
  max_count = 0
  for e in l:
    if e == val:
      count += 1
    elif count > 0:
      max_count = max(max_count, count)
      count = 0
  max_count = max(max_count, max) # case when the sequence is at the end
  return max_count

l = [2,2,3,2,2,2,2,3,3,4,4,4,5,4,4,7,6]
print(get_longest_seq(l, 4))
0 голосов
/ 09 октября 2019

Если вы пытаетесь реализовать это в Python, вы должны использовать groupby. itertools.groupby, по умолчанию группирует объекты в кортежи (object_name, list_of_objects), поэтому:

a = [1, 0, 1, 1, 2, 2, 2, 3]
groupby(a) ~ [(1, [1]), (0, [0]), (1, [1, 1]), (2, [2, 2, 2]), (3, [3])]
# I use "~" here because it's not actually a list, it's a generator, but meh

Вы можете легко использовать понимание списка, чтобы получить то, что вам нужно.

from itertools import groupby
repeat_lengths = [sum(1 for _ in group) for _, group in groupby(x)]
# the `sum(1 for _ in group)` is a workaround for the fact that `group` is not a list and has no length

Тогда просто найдите максимум этого списка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...