Python反向词性能

时间:2018-12-14 11:42:38

标签: python string performance

我试图用Python反转单词。简单的问题(代码)。

解决方案1 ​​(20毫秒-99.54%百分位数)

<<

解决方案2 (24毫秒-48%百分位数)

words = reversed([word.strip() for word in words if word != ''])

answer = " ".join(words).strip()

我正在寻找这种差异的原因吗?

2 个答案:

答案 0 :(得分:0)

使用timeithttps://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}来交换顺序) }}首先被调用);时间差异似乎是随机的。