Создание собственной функции Counter без использования встроенных модулей - PullRequest
0 голосов
/ 28 апреля 2018

У меня есть этот код:

L = [1, 4, 7, 5, 5, 4, 5, 1, 1, 1]

def frequency(L):
    counter = 0
    number = L[0]
    for i in L:
        amount_times = L.count(i)
        if amount_times > counter:
            counter = amount_times
            number = i
    return number

print(frequency(L))

Но я не хочу использовать функцию счетчика. Я хочу, чтобы код запускался без каких-либо встроенных функций. Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 28 апреля 2018

Вы можете попробовать это. Не уверен, что это приемлемо для вас.

Находит наиболее часто встречающийся элемент в списке без использования встроенных модулей:

L = [1, 4, 7, 5, 5, 4, 5, 1, 1, 1]

def frequency(L):
    count, item = 0, ''
    d = {i:0 for i in L}
    for i in L[::-1]:
         d[i] = d[i] + 1
         if d[i] >= count :
             count = d[i]
             item = i
    return item

print(frequency(L))
# 1
0 голосов
/ 28 апреля 2018

Если вы действительно хотите заново изобрести collections.Counter, это возможно как с list.count, так и без него. Однако я не вижу смысла.

Используя list.count, вы можете использовать словарь для понимания. Это неэффективно, поскольку список передается один раз для каждой переменной.

def frequency2(L):
    return {i: L.count(i) for i in set(L)}

Если вы не хотите использовать list.count, это возможно с помощью if / else:

def frequency3(L):
    d = {}
    for i in L:
        if i in d:
            d[i] += 1
        else:
            d[i] = 0
    return d

Затем, чтобы извлечь наибольшее количество (и):

maxval = max(d.values())
res = [k for k, v in d.items() if v == maxval]
...