我在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 变慢了?