Python 打印具有排名关系的列表中最频繁的k个编号
我试图找到一种方法来打印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)
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)
评论不用于扩展讨论;此对话已结束。评论不用于扩展讨论;此对话已结束。