[英]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.