我是Python新手,目前我正在解决问题以提高编程技能。目前我正在处理一个问题,我必须stable sort
输入和输出反向稳定的排序值。我编写了它,并在网站的在线裁判和一个测试用例(不知道测试用例)中执行代码,我得到了Memory Limit Exceeded
错误。因此,经过一番调查,我发现代码中存在memory leak
,代码不完全有效。所以我已经安装了python的memory_profiler
来监视进程的内存消耗以及我的代码的内存消耗的逐行分析。识别python中的内存泄漏 - 内存分析器
请在下面找到从memory_profiler
获取的输入详细信息,代码,输出和内存分析分析。
输入:
8
1 2
16 3
11 2
20 3
3 5
26 4
7 1
22 4
代码:
from collections import OrderedDict
@profile
def test_1():
print "Enter the number: "
n = raw_input()
k = []
v = []
print "Enter ID and M: "
for i in range(0,int(n)):
a, b = raw_input().split(' ')
k.append(a)
v.append(b)
d = OrderedDict(zip(k,v))
sorted_items = sorted(d.items(), key=lambda (k,v):int(v), reverse=True)
for i, j in sorted_items:
print i, j
if __name__ == '__main__':
test_1()
输出:
Line # Mem usage Increment Line Contents
================================================
2 10.520 MiB 0.000 MiB @profile
3 def test_1():
4 10.531 MiB 0.012 MiB print "Enter the number: "
5 10.551 MiB 0.020 MiB n = raw_input()
6 10.551 MiB 0.000 MiB k = []
7 10.551 MiB 0.000 MiB v = []
8 10.551 MiB 0.000 MiB print "Enter ID and M: "
9 10.551 MiB 0.000 MiB for i in range(0,int(n)):
10 10.551 MiB 0.000 MiB a, b = raw_input().split(' ')
11 10.551 MiB 0.000 MiB k.append(a)
12 10.551 MiB 0.000 MiB v.append(b)
13
14 10.551 MiB 0.000 MiB d = OrderedDict(zip(k,v))
15 10.555 MiB 0.004 MiB sorted_items = sorted(d.items(), key=lambda (k,v):int(v), reverse=True)
16 10.555 MiB 0.000 MiB for i, j in sorted_items:
17 10.555 MiB 0.000 MiB print i, j
预期输出(我能获得所需的输出):
3 5
26 4
22 4
16 3
20 3
1 2
11 2
7 1
此代码对于更高输入或更高数字无效吗?从分析中我可以看到只有更少的内存被利用,但对于那个特定的测试案例,我可以看到内存利用率超过了16MB。 有人能告诉我我在哪里做错了。我的方法错误或流程错误?你能告诉我为什么我无法按预期得到产出吗?提前致谢。任何帮助将非常感激。
预期输出是什么?你为什么认为它应该使用更少的内存? – gil
更新了问题以显示预期的输出 – Dev
看起来您的代码是正确的,就像我的修订版本一样。既然没有办法知道测试用例(设计这个在线课程的人应该真的重新考虑这个问题),我们来看看是否刮掉列表并将'range'改为'xrange'会有帮助。 – gil