我试图用Python反转单词。简单的问题(代码)。
解决方案1 :(20毫秒-99.54%百分位数)
<<
解决方案2 :(24毫秒-48%百分位数)
words = reversed([word.strip() for word in words if word != ''])
answer = " ".join(words).strip()
我正在寻找这种差异的原因吗?
答案 0 :(得分:0)
使用timeit
(https://docs.python.org/3.7/library/timeit.html)进行基准测试,以了解时间大致相同(对于我猜想的输入样本):
def opt1(words):
words = reversed([word.strip() for word in words if word != ''])
answer = " ".join(words).strip()
return answer
def opt2(words):
words = [word.strip() for word in words if word != '']
answer = " ".join(reversed(words)).strip()
return answer
import timeit, functools
t_opt1 = timeit.Timer(functools.partial(opt1, words))
t_opt2 = timeit.Timer(functools.partial(opt2, words))
# run 5000 times each method:
print('opt1: ', t_opt1.timeit(5000))
print('opt2: ', t_opt2.timeit(5000))
答案 1 :(得分:0)
这里唯一的区别在于,当对临时list
的引用被丢弃时(在第一种情况下的join
期间,直到第二种情况下的函数退出为止)。但这不太可能无关紧要,除非时序框架以某种方式被破坏(在两种情况下都应包含任何清理时间)。
否则,除非某些替代解释器包含奇怪的行为,否则两组代码的行为应相同(操作代码相同,除了根据先存储list
还是{{1}来交换顺序) }}首先被调用);时间差异似乎是随机的。