Python 在某些情况下,相同但语法不同的代码是否运行得更快?

Python 在某些情况下,相同但语法不同的代码是否运行得更快?,python,syntax,big-o,list-comprehension,Python,Syntax,Big O,List Comprehension,语法会变大吗?或者改变程序的处理速度?我将以python为例 如果我有列表理解代码: new_list = [expression(i) for i in old_list if filter(i)] 它的运行方式是否与: new_list = [] for i in old_list: if filter(i): new_list.append(expressions(i)) 这些代码有什么不同之处吗?一个会比另一个更快吗?为什么或者为什么不?Big-O没有说明编程

语法会变大吗?或者改变程序的处理速度?我将以python为例

如果我有列表理解代码:

new_list = [expression(i) for i in old_list if filter(i)]
它的运行方式是否与:

new_list = []
for i in old_list:
    if filter(i):
        new_list.append(expressions(i))

这些代码有什么不同之处吗?一个会比另一个更快吗?为什么或者为什么不?

Big-O没有说明编程语言中的语法选择。它仅用作比较算法的工具

语法选择可以改变每次迭代的固定成本。您的特定示例在每次迭代中具有不同的固定执行成本,因此执行速度将有所不同

在Python中,您可以使用来比较实现相同算法的两种方法的执行速度,还可以使用来分析每个可选“拼写”将执行哪些字节码,从而告知Python解释器将为每个迭代做多少工作


对于特定的示例,列表理解会更快,因为它在字节码中的工作更少;在第二个示例中,额外查找.append方法以及调用它会减慢速度。

您提到了固定成本,但它到底指的是什么?字节码中的工作负载?有什么地方可以让我开始更详细地阅读这篇文章吗?除了测试之外,还有一般的指导方针吗?我只是想从这里开始。@ApathyBear:然后从算法设计的良好基础课程开始;我喜欢;Brilliant有一个更新的课程。谢谢大家!@ApathyBear:在这种情况下,固定成本是执行算法的一次迭代所需的时间。这两种实现都基于算法,您可以将其与未启用的算法进行比较,并知道渐进地讲,启用一个会更快或更慢。迭代的固定成本根本不起作用。相反,当N被推到无穷大时,你会知道哪个算法会赢,因为像一个循环需要多长时间这样的琐碎细节在这个尺度上不再重要;它也许可以移植到程序员身上,但您需要缩小范围。我会看看我是否可以编辑它来提高一点。OTOH,可能已经在Programmers.SE上有了一个副本。