【发布时间】:2012-07-20 10:27:00
【问题描述】:
我创建了这个脚本来计算 python 中的string similarity。有什么办法可以让它运行得更快吗?
tries = input()
while tries > 0:
mainstr = raw_input()
tot = 0
ml = len(mainstr)
for i in xrange(ml):
j = 0
substr = mainstr[i:]
ll = len(substr)
for j in xrange(ll):
if substr[j] != mainstr[j]:
break
j = j + 1
tot = tot + j
print tot
tries = tries - 1
编辑:经过一些优化后,这是代码,但这还不够!
tries = int(raw_input())
while tries > 0:
mainstr = raw_input()
tot = 0
ml = len(mainstr)
for i in xrange(ml):
for j in xrange(ml-i):
if mainstr[i+j] != mainstr[j]:
break
j += 1
tot += j
print tot
tries = tries - 1
EDIT 2:第三版代码。还是不行!
def mf():
tries = int(raw_input())
for _ in xrange(tries):
mainstr = raw_input()
tot = 0
ml = len(mainstr)
for i in xrange(ml):
for j in xrange(ml-i):
if mainstr[i+j] != mainstr[j]:
break
j += 1
tot += j
print tot
mf()
【问题讨论】:
-
或许更适合Code Review?
-
嗯,
j = j + 1语句当然可以删除,因为j将立即被覆盖。j = 0语句也是如此。 -
使用
tries = int(raw_input()) -
你可以用
for _ in xrange(tries)代替while循环 -
@EdwinDrood:我的机器和 ideone 都这么说
xrange()is faster thanwhileloop。尽管在您的情况下这无关紧要(测试次数
标签: python optimization micro-optimization