【发布时间】:2017-08-27 06:19:01
【问题描述】:
我在leetcode 上看到了一个有趣的编程练习解决方案,它甚至与问题/解决方案本身无关,因此如果您愿意,可以在提供的链接上阅读它。然而,一个高票的解决方案是这一个班轮:
片段 1
def fizzBuzz2(n):
return ["Fizz" * (not i%3) + "Buzz" * (not i%5) or str(i) for i in range(1, n+1)]
片段 2
def fizzBuzz(n):
out = []
for i in range(1, n+1):
if i % 3 == 0 and i % 5 == 0:
out.append("FizzBuzz")
elif i % 3 == 0:
out.append("Fizz")
elif i % 5 == 0:
out.append("Buzz")
else:
out.append(str(i))
return out
但是,我预计列表推导会击败公共循环,但是当我对其进行计时时,情况并非如此。即使做一个 dis,Snippet 2 也有更多的指令。
是什么让 Snippet 1 变慢了?
【问题讨论】:
-
sn-p 2 在我的测试中较慢。顺便说一句,里面有一个流浪的
self。 -
字符串连接与文字字符串,但 Snippet 2 也根据需要执行两倍的
%操作。 -
我自己无法在 atm 上检查它,但列表理解是否可能检查所有语句,而 if elif 结构只检查直到一个条件成立?
-
感谢迷途的自己,你是不是用了很大的n?像 1.000.000 ?
-
我过去曾为 Comparing list comprehensions and explicit loops (3 array generators faster than 1 for loop) 做过一些分析。您可能会发现它很有用
标签: python