[英]How do I optimise this Python code?
我正在做一个有趣的编码挑战,并努力提高自己的技能-你们中的一些人可能还记得去年12月的代码问世挑战,我正在努力。 我已经获得了这段代码作为对其中一个问题的解决方案,该方法可以正常工作,但是它的速度很慢。
inp = "1113122113"
def iterate(num):
pos = 0
new = ""
while pos < len(num):
counter = 0
d = num[pos]
for i in range(pos, len(num)):
if num[i] == d:
counter += 1
else:
break
new+=str(counter)
new+=str(d)
pos += counter
print len(new)
return new
for i in range (50):
inp = iterate(inp)
经过约35次迭代后,每次迭代都需要花费几分钟。 目的是生成一个外观序列-因此1进入11,然后是21、1211、111221、3112211,依此类推。 我需要在第50次迭代后找到字符串的长度,但是经过40次迭代后,它的长度为360154个字符,而我的代码还不够优化,无法在合理的时间内处理那么长的字符串。 谁能给我一些指导?
使用itertools.groupby
将使此过程非常快。
from itertools import groupby
def next_say(s):
return ''.join(str(sum(1 for _ in g))+k for k, g in groupby(s))
def iterate(num):
"""Generator that yields the first num iterations"""
val = '1'
for i in range(num):
val = next_say(val)
yield val
https://docs.python.org/2/library/itertools.html#itertools.groupby
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.