我是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
我的代码中是否存在导致效率低下的问题,还是网站?
答案 0 :(得分:0)
我怀疑编码网站是通过为lst
传递一个非常大的生成器来测试你的函数。当程序将其转换为set
时,它会将整个输入加载到内存中。如果这会占用太多内存,那么你的进程可能会被OOM杀手杀死。
我认为以下解决方案应该有效。请注意,它只是迭代lst
并且不构造任何其他大型数据结构;唯一的状态是堆栈变量c
和ans
。因此,它使用常量内存量。
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