优化Python代码

时间:2011-08-23 18:00:19

标签: python performance optimization

我一直在研究InterviewStreet.com上的编码挑战之一,我遇到了一些效率问题。任何人都可以建议我可以更改代码以使其更快更有效吗?

Here's the code

Here's the problem statement if you're interested

4 个答案:

答案 0 :(得分:93)

答案 1 :(得分:3)

首先,对您的代码进行分析,以便了解问题所在。有很多如何做到这一点的例子,这里有一个:https://codereview.stackexchange.com/questions/3393/im-trying-to-understand-how-to-make-my-application-more-efficient

您可以执行大量索引访问,如下所示:

for pair in range(i-1, j):
    if coordinates[pair][0] >= 0 and coordinates[pair][1] >= 0:

可以更明白地写成:

for coord in coordinates[i-1:j]:
    if coord[0] >= 0 and cood[1] >= 0:

列表理解很酷且“pythonic”,但如果你没有创建4个列表,这段代码可能运行得更快:

N = int(raw_input())
coordinates = []
coordinates = [raw_input() for i in xrange(N)]
coordinates = [pair.split(" ") for pair in coordinates]
coordinates = [[int(pair[0]), int(pair[1])] for pair in coordinates]

我会把所有这些放在一个简单的循环中,或者如果你真的死在列表推导上,将多个转换封装到一个对raw_input()进行操作的函数中。

答案 2 :(得分:2)

This answer显示了我如何找到要优化的代码。 假设有一些代码可以替换,例如,它占40%的成本。 然后它在40%的时间内驻留在调用堆栈上。 如果您取10个调用堆栈样本,它将出现在其中4个,给予或接受。 有多少样本显示它并不重要。 如果它出现在两个或更多,如果你可以替换它,你将节省它花费的任何时间。

答案 3 :(得分:1)

大多数采访街道问题似乎都会以一种方式进行测试,以验证您是否找到了具有正确大O复杂度的算法,而不是以最佳方式编写解决方案。

换句话说,如果由于时间不多而导致某些测试用例失败,则可能需要找出算法复杂度较低的解决方案,而不是微观优化您的算法。这就是为什么他们通常说N可能很大。