首页 > 解决方案 > 我将如何修复此功能?

问题描述

嘿,这是我的第一个问题,所以我希望我做对了。

我正在尝试编写一个函数,它给出一个整数列表和 N 作为最大出现次数,然后返回一个列表,其中删除了最大出现次数之上的任何整数。例如,如果我输入: [20,37,20,21] #list of integers1 #maximum occurrence. 然后作为输出我会得到: [20,37,21]因为数字 20 出现了两次,并且最大出现次数是 1,所以它被从列表中删除。这是另一个例子: Input: [1,1,3,3,7,2,2,2,2], 3 Output: [1,1,3,3,7,2,2,2]

这是我到目前为止写的内容,我将如何优化它?我不断收到超时错误。非常感谢您提前。

def delete_nth(order,n):
    order = Counter(order)
    for i in order:
        if order[i] > n:
            while order[i] > n:
                order[i] - 1
    return order

print(delete_nth([20,37,20,21], 1))

标签: pythonfunctionoptimization

解决方案


您可以在开始时删除构建Counter- 只需将临时字典作为计数器:

def delete_nth(order,n):
    out, counter = [], {}
    for v in order:
        counter.setdefault(v, 0)
        if counter[v] < n:
            out.append(v)
            counter[v] += 1
    return out

print(delete_nth([20,37,20,21], 1))

印刷:

[20, 37, 21]

推荐阅读