在Python 3中有效地生成字符串

时间:2018-06-13 20:53:06

标签: python-3.x

我是编程新手,非常感谢有关如何编写此类程序以便更快执行的任何建议。目标是生成随机字符串,直到找到特定的字符串,如本例中的'cat',然而,要点不是尽可能快地找到字符串'cat'。从我的初始版本开始,我做了一些改进,现在比起初快了大约9倍。 我发现的一些事情是使用列表比使用更快:

random.choice(string.ascii_lowercase)

只保留必要数量的字符比连续向RandomLetters添加NewLetter变量要快。 如何改进或重写此代码?我还用最后一行代码来确定每秒检查的字母数。我认为这可以更好地衡量程序运行的速度而不是时间,因为在某些情况下,“cat”会更快找到,而某些情况则需要更多尝试。什么是更准确的方法来确定程序有多快?我使用while循环来找到50只猫,否则我发现在将LettersGenerated分成时间时,结果差异很大。这是我的代码:

import random
import timeit
start = timeit.default_timer()
Alphabet = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
LettersGenerated = 0
NamesFound = 1
Name = 'cat'
RandomLetters = ''
while NamesFound <= 50:
    while Name not in RandomLetters:
        NewLetter = random.choice(Alphabet)
        RandomLetters = RandomLetters + NewLetter
        LettersGenerated += 1
        lenght = len(RandomLetters)
        if lenght == len(Name)+1:
            RandomLetters = RandomLetters[1:]
            while Name not in RandomLetters:
                NewLetter = random.choice(Alphabet)
                RandomLetters = RandomLetters + NewLetter
                LettersGenerated += 1
                RandomLetters = RandomLetters[1:]
    NamesFound += 1
    RandomLetters = ''
stop = timeit.default_timer()
print(stop-start)
print(LettersGenerated/(stop-start))

0 个答案:

没有答案