Python反向词performan

2024-04-25 06:14:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着用Python反转单词。简单问题(leetcode)。你知道吗

溶液1:(20 ms-99.54%百分位数)

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

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

溶液2(24 ms-48%百分位数)

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

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

我想找出这种差异的原因?你知道吗


Tags: answerinforif原因差异单词word
2条回答

这里唯一的区别在于对临时list的引用何时被丢弃(在第一种情况下是在join期间,在第二种情况下是在函数退出之前)。但除非时间框架以某种方式被打破(在这两种情况下都应该包含任何清理时间),否则这不太可能有什么关系。你知道吗

否则,除非涉及到具有奇怪行为的其他解释器,否则这两组代码的行为应该相同(除了根据是先存储list还是先调用reversed来交换顺序之外,操作代码是相同的);时间差似乎更可能是随机的。你知道吗

使用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))

相关问题 更多 >