以下是优化代码:
import random
rules = {
'X': {
1: 'FXFF+',
2: '+XXF]',
}
}
L_string = 'FX'
def next_char(c):
isrule = rules.get(c, c)
if not isrule == c:
_, choice = random.choice(list(rules.get(c).items()))
return choice
else:
return isrule
for _ in range(6):
L_string = ''.join([next_char(c) for c in L_string])
这里发生的是字符串中字符的递归替换。所以一步一步:
最后,结果是一个较长的字符串,由开头的“F”和规则“FXFF+”、“+XXF]”以某种随机组合形式组成。下表说明:
+------------+--------------------+--------------------+
| ITERATIONS | STRING | CHOSEN RULE VECTOR |
+------------+--------------------+--------------------+
| 1 | FFXFF+ | [rule 1] |
| 2 | FF+XXF]FF+ | [rule 2] |
| 3 | FF+FXFF++XXF]F]FF+ | [rule 1, rule 2] |
| 4 | ... | ... |
| 5 | ... | ... |
+------------+--------------------+--------------------+
我读过回复sub是替换字符串的最快方法,但问题是每个字符的随机化。回复sub这不管用。你知道吗
谢谢大家!你知道吗
假设您的模式中没有出现字符{和},您可以使用模板语言进行一些技巧,然后去掉大括号。这在我的机器上快了2.5倍:
对消耗大部分运行时间的函数进行~4倍的简单加速。你知道吗
可能还有很大的优化空间。也许某个地方的回忆录会给整个代码带来巨大的提升。你知道吗
新的递归方法,大约快1.6倍,另一种方法,大约快3.312倍在我的电脑上
结果是:
编辑:添加@hilberts方法
EDIT2:添加了另一个新方法,比原来的方法快3.32倍
EDIT3:添加@altunyurt方法
相关问题 更多 >
编程相关推荐