Python 打印具有排名关系的列表中最频繁的k个编号

Python 打印具有排名关系的列表中最频繁的k个编号,python,recursion,Python,Recursion,我试图找到一种方法来打印k个最频繁的文本文件。我能够将这些数字排序到一个列表列表中,并在文本文件中显示它的编号 l=[(0,7),(3,4),(-101,3),(2,3),(-3,1),(-2,1),(-1,1),(101,1)]0是数字本身,7表示它在文件中出现了7次,以此类推 所以,现在我想打印出文件中k个最频繁的数字(应该递归完成),但我正在努力解决秩关系。例如,如果k=3,我要打印: [(0,7),(3,4),(-101,3),(2,3)]#前三个频率 我试着做: def head(l)

我试图找到一种方法来打印k个最频繁的文本文件。我能够将这些数字排序到一个列表列表中,并在文本文件中显示它的编号

l=[(0,7),(3,4),(-101,3),(2,3),(-3,1),(-2,1),(-1,1),(101,1)]0是数字本身,7表示它在文件中出现了7次,以此类推

所以,现在我想打印出文件中k个最频繁的数字(应该递归完成),但我正在努力解决秩关系。例如,如果k=3,我要打印:

[(0,7),(3,4),(-101,3),(2,3)]#前三个频率

我试着做:

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,''))
def头(l):返回l[0]
def tail(l):返回l[1:]
def topk(左、右、东):

如果(len(l)您可以使用带有参数
键的
排序的
内置函数
从顶部
k
获取最后一个频率,然后您可以使用列表综合来获取频率
=
小于该最小值的所有元素:

v = sorted(l, key=lambda x: x[1])[-3][1]
[e for e in l if e[1] >= v]
输出:

[(0, 7), (3, 4), (-101, 3), (2, 3)]

如果需要递归版本,可以使用:

def my_f(l, v, top=None, i=0):

    if top is None:
        top = []

    if l[i][1] >= v:
        top.append(l[i])

    if i == len(l) - 1:
        return top

    return my_f(l, v, top, i+1)

def topk(l, k):
    k = min(len(l), k)
    v = sorted(l, key=lambda x: x[1])[-3][1]
    return my_f(l, v)

topk(l, 3)  

您可以使用带有参数
键的
sorted
内置函数从顶部
k
获取最后一个频率,然后您可以使用列表综合功能获取频率
=
小于该最小值的所有元素:

v = sorted(l, key=lambda x: x[1])[-3][1]
[e for e in l if e[1] >= v]
输出:

[(0, 7), (3, 4), (-101, 3), (2, 3)]

如果需要递归版本,可以使用:

def my_f(l, v, top=None, i=0):

    if top is None:
        top = []

    if l[i][1] >= v:
        top.append(l[i])

    if i == len(l) - 1:
        return top

    return my_f(l, v, top, i+1)

def topk(l, k):
    k = min(len(l), k)
    v = sorted(l, key=lambda x: x[1])[-3][1]
    return my_f(l, v)

topk(l, 3)  

评论不用于扩展讨论;此对话已结束。评论不用于扩展讨论;此对话已结束。