簡體   English   中英

如何優化此Python代碼?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM