Traceback (most recent call last):
File "/run-1341144766-1067082874/solution.py", line 27, in
main()
File "/run-1341144766-1067082874/solution.py", line 11, in main
if len(s[i:j+1]) > 0:
MemoryError
Error in sys.excepthook:
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/apport_python_hook.py", line 64, in apport_excepthook
from apport.fileutils import likely_packaged, get_recent_crashes
File "/usr/lib/python2.7/dist-packages/apport/__init__.py", line 1, in
from apport.report import Report
MemoryError
Original exception was:
Traceback (most recent call last):
File "/run-1341144766-1067082874/solution.py", line 27, in
main()
File "/run-1341144766-1067082874/solution.py", line 11, in main
if len(s[i:j+1]) > 0:
MemoryError
当我尝试运行以下程序时出现上述错误。有人可以解释什么是内存错误,以及如何解决这个问题? . 该程序将字符串作为输入并找到所有可能的子字符串并从中创建一个集合(按字典顺序)并且它应该在用户要求的相应索引处打印值,否则它应该打印“无效”
def main():
no_str = int(raw_input())
sub_strings= []
for k in xrange(0,no_str):
s = raw_input()
a=len(s)
for i in xrange(0, a):
for j in xrange(0, a):
if j >= i:
if len(s[i:j+1]) > 0:
sub_strings.append(s[i:j+1])
sub_strings = list(set(sub_strings))
sub_strings.sort()
queries= int(raw_input())
resul = []
for i in xrange(0,queries):
resul.append(int(raw_input()))
for p in resul:
try:
print sub_strings[p-1]
except IndexError:
print 'INVALID'
if __name__ == "__main__":
main()
原文由 sachin irukula 发布,翻译遵循 CC BY-SA 4.0 许可协议
这个在这里:
对于大字符串来说似乎是非常低效和昂贵的。
最好做
缓冲区对象保留对原始字符串以及开始和长度属性的引用。这样,就不会发生不必要的数据重复。
A string of length
l
hasl*l/2
sub strings of average lengthl/2
, so the memory consumption would roughly bel*l*l/4
.有了缓冲区,它就小了很多。请注意
buffer()
仅存在于 2.x 中。 3.x 有memoryview()
,使用方式略有不同。更好的方法是计算索引并按需剪切子字符串。