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

时间:2017-08-17 23:36:28

标签: python

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

我已经创建了一个似乎可以在python插件外部工作的代码,但是在网站内部出现了“使用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

我的代码中是否存在导致效率低下的问题,还是网站?

1 个答案:

答案 0 :(得分:0)

我怀疑编码网站是通过为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