首页 > 解决方案 > 在 Python 3 中高效地生成字符串

问题描述

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

random.choice(string.ascii_lowercase)

并且只保留必要数量的字符比连续添加 NewLetter 变量到 RandomLetters 更快。如何改进或重写此代码?最后一行代码我用来确定每秒检查了多少个字母。我认为这是衡量程序运行速度而不是时间的更好衡量标准,因为在某些情况下会更快地找到“猫”,并且在某些情况下需要更多尝试。确定程序有多快的更准确方法是什么?我使用 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))

标签: python-3.x

解决方案


推荐阅读