Как Вы вычисляете самое большое количество повторений в списке?

Xcode 4 и ниже

Для тех, кто пропустил его: вы можете использовать экран настроек проекта, чтобы зафиксировать ориентации по всему приложению (нет необходимости переопределять методы в каждом контроллере):

enter image description here

Это так же просто, как переключение поддерживаемых ориентаций интерфейса. Вы можете найти, нажав на свой проект в левой панели> цель приложения> вкладка Сводка.

10
задан hekevintran 16 October 2012 в 12:11
поделиться

5 ответов

Используйте groupby , он группирует элементы по значению:

from itertools import groupby
group = groupby([1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 1, 1])
print max(group, key=lambda k: len(list(k[1])))

И вот код в действии:

>>> group = groupby([1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 1, 1])
>>> print max(group, key=lambda k: len(list(k[1])))
(2, <itertools._grouper object at 0xb779f1cc>)
>>> group = groupby([1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 1, 1, 3, 3, 3, 3, 3])
>>> print max(group, key=lambda k: len(list(k[1])))
(3, <itertools._grouper object at 0xb7df95ec>)

Из документации python:

Работа groupby () похож к фильтру uniq в Unix. Это генерирует перерыв или новую группу каждые время значение ключевой функции changes

# [k for k, g in groupby('AAAABBBCCDAABBB')] --> A B C D A B
# [list(g) for k, g in groupby('AAAABBBCCD')] --> AAAA BBB CC D

Если вам также нужен индекс самого длинного прогона, вы можете сделать следующее:

group = groupby([1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 1, 1, 3, 3, 3, 3, 3])
result = []
index = 0
for k, g in group:
   length = len(list(g))
   result.append((k, length, index))
   index += length

print max(result, key=lambda a:a[1])
42
ответ дан 3 December 2019 в 13:28
поделиться

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

Counts={}
Current=0
Current_Count=0
LIST = [1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 1, 1]
for i in LIST:
    if Current == i:
        Current_Count++
    else:
        Current_Count=1
        Current=i
    if Current_Count>Counts[i]:
        Counts[i]=Current_Count
print Counts
3
ответ дан 3 December 2019 в 13:28
поделиться

Я бы использовал хэш-карту элемента для счетчика.

Каждый раз, когда вы видите последовательность «ключей», увеличивайте значение его счетчика. Если вы попали в новый элемент, установите счетчик на 1 и продолжайте. В конце этого линейного поиска у вас должно быть максимальное количество последовательностей для каждого числа.

0
ответ дан 3 December 2019 в 13:28
поделиться

Если вы хотите, чтобы это было только для любого элемента (т.е. элемента с наибольшим количеством повторений), вы можете использовать:

def f((v, l, m), x):
    nl = l+1 if x==v else 1
    return (x, nl, max(m,nl))

maxrep = reduce(f, l, (0,0,0))[2];

Это учитывает только непрерывные повторения (Результат для [1,2,2,2,1,2] будет 3 ) и записывает только элемент с максимальным номером.

Изменить : Сделано определение фа немного короче ...

1
ответ дан 3 December 2019 в 13:28
поделиться

Кажется, этот код работает :

l = [1, 2, 2, 2, 2, 1, 1, 1, 2, 2, 1, 1]
previous = None

# value/repetition pair
greatest = (-1, -1)
reps = 1

for e in l:
    if e == previous:
        reps += 1
    else:
        if reps > greatest[1]:
            greatest = (previous, reps)

        previous = e
        reps = 1

if reps > greatest[1]:
    greatest = (previous, reps)

print greatest
0
ответ дан 3 December 2019 в 13:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: