python-3.x - 在 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))
解决方案
推荐阅读
- r - 如果另一列中的值包含某个单词/字母,则在列中插入值
- mysql - 运行减法,但仅在金额仍高于限制时才进行减法
- python - while循环中的逻辑错误?(Python)
- python - 理解python语法
- java - 在 Android 中使用 Intent 时使用全局变量覆盖变量名称类
- machine-learning - scikit-learn 中自定义参数的超参数调优
- sql - Blazor 服务器 - 从 SQL 返回计数 - 返回 System.Collections.Generic.List`1[System.Object]
- java - 在这个 Java 的 char 数组代码中 - sum += c - '0' 行的目的是什么?
- java - Jersey 过滤器发生在 Jetty url 重写处理程序之前
- node.js - 添加新节点模块后,领域-cli 推送失败