Я пытался найти способ распечатать k наиболее часто встречающихся текстовых файлов. Мне удалось отсортировать эти числа в список списков с его номером появления в текстовом файле.
l =[(0, 7), (3, 4), (-101, 3), (2, 3), (-3, 1), (-2, 1), (-1, 1), (101, 1)] # 0 is the number itself, 7 means it appeared in file 7 times, and etc
Итак, теперь я хочу распечатать k наиболее часто встречающихся номеров файла (должно быть сделано РЕКУРСИВНО), но я борюсь с ранговыми связями. Например, если k = 3, я хочу напечатать:
[(0, 7), (3, 4), (-101, 3), (2, 3)] # top 3 frequencies
Я попытался сделать:
def head(l): return l[0]
def tail(l): return l[1:]
def topk(l,k,e):
if(len(l)<=1 or k==0):
return [head(l)[1]]
elif(head(l)[1]!=e):
return [head(l)[1]] + topk(tail(l),k-1,head(l)[1])
else:
return [head(l)[1]] + topk(tail(l),k,head(l)[1])
l1 = [(0, 7), (3, 4), (-101, 3), (2, 3), (-3, 1), (-2, 1), (-1, 1), (101, 1)]
l2 = [(3.3, 4), (-3.3, 3), (-2.2, 2), (1.1, 1)]
print(topk(l1,3,''))
print(took(l2,3,''))
l1 печатает правильно, но l2 имеет дополнительную частоту по какой-то причине.