我不明白为什么我在python上收到SIGKILL

2024-10-01 04:46:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python的初学者,我试图在一个代码挑战网站上编写一个代码,当给定一个整数列表时,返回最接近零的整数。如果有两个不同的整数具有相同的差异,例如3和-3,则应返回None(但是,如果数字是重复的,例如3和3,则不算作)

我编写了一个代码,它似乎可以在python interpeters外部工作,但在网站内部,它给出了一个错误“带有SIGKILL信号的进程过早退出”

在外部Python解释器上,这似乎返回了我要查找的整数

def closest(lst):

    ans = list(filter(lambda x: abs(0-x) == min([abs(0-i) for i in set(lst)]), set(lst)))

    return ans[0] if len(ans) < 2 else None

我的代码中有什么导致效率低下的吗?还是网站


Tags: 代码none列表网站错误数字整数abs
1条回答
网友
1楼 · 发布于 2024-10-01 04:46:39

我怀疑编码网站通过传递一个非常大的lst生成器来测试您的函数。当您的程序将其转换为set时,它会将整个输入加载到内存中。如果这占用了太多内存,您的进程可能会被OOM杀手杀死

我认为下面的解决办法应该行得通。注意,它只是在lst上迭代,不构造任何其他大型数据结构;唯一的状态是堆栈变量cans。因此它使用常量内存量

def closest(lst):
    (c, ans) = (None, None)
    for i in lst:
        if (c is None) or (abs(i) < abs(c)):
            (c, ans) = (i, i)
        elif i == -1 * c:
            ans = None
    return ans

相关问题 更多 >