我有这段代码:
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))
但我不想使用反函数。我想在没有任何内置函数的情况下运行代码。我怎么能这样做?
答案 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