Подсчитайте длину множества повторяющихся чисел, идущих один за другим в списке чисел - PullRequest
0 голосов
/ 23 марта 2020

У меня есть список чисел вида [1,2,2,2,3,2,2,2,2], и мне нужно найти максимальную частоту повторений, идущих один за другим. В приведенном выше примере мы имеем в целом 7 '2, но правильный ответ - 4, потому что 4 - это последовательность чисел с наибольшей длиной. В случае [1,2,2,2,2,2,1,2,2] правильный ответ равен 5, хотя у нас 7 дубликатов из 2. Я попытался использовать следующий код для поиска списка дубликатов каждого числа, идущего один за другим:

list1 = [1,2,2,2,3,2,2,2,2]
for number in set(list1):
    count = 1
    list1 = [1,2,2,2,3,2,2,2,2]
    for idx, i in enumerate(list1):
        if i == number and list1[idx-1] == number:
            count += 1
        else:
            count == 0
    print(number, count)

Но он работает неправильно, так как он также включает некоторые дубликаты из предыдущего «набора дубликатов». Вывод был:

1 1
2 6
3 1

Ответы [ 3 ]

1 голос
/ 23 марта 2020

Другая возможность:

from itertools import groupby
from operator import itemgetter
ll = [[1,2,2,2,3,2,2,2,2], [1,2,2,2,2,2,1,2,2]]
for l in ll:
    counts = [(i, len(list(c))) for i, c in groupby(l)]
    indices = list(map(itemgetter(1), counts))
    idx = indices.index(max(indices))
    print(counts[idx])

Где вы можете получить элемент с количеством повторений, в зависимости от потребностей.

1 голос
/ 23 марта 2020

Использование itertools.groupby с max

Пример:

from itertools import groupby

data = [[1,2,2,2,3,2,2,2,2], [1,2,2,2,2,2,1,2,2]]
for i in data:
    print(max((list(v) for _, v in groupby(i)), key=len))

Выход:

[2, 2, 2, 2]
[2, 2, 2, 2, 2]
0 голосов
/ 23 марта 2020

Придерживайтесь вашего решения:

final_count = []
count = 0
list1 = [1,2,2,2,3,2,2,2,2]
for idx, i in enumerate(list1):
    if i == 2: 
        count += 1
        if idx == len(list1) - 1: final_count.append(count)
    else:
        final_count.append(count)
        count = 0

result = max(final_count)
print(result)
...