在不使用内置函数的情况下构建自定义Counter函数

时间:2018-04-28 12:43:19

标签: python function counter frequency

我有这段代码:

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 :(得分:0)

如果确实想要重新发明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]

答案 1 :(得分:0)

你可以尝试这个。不确定这个是否可以接受。

这可以在不使用内置函数的情况下找到列表中最常用的项目:

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