我在Python中有'append'有一些性能問題。 我正在寫一個算法,檢查是否有一個(大)的一組圓圈中有兩個重疊的圓圈。 我首先將圓圈的極端點(x_i-R_i & x_i + R_i)放在列表中,然後對列表進行排序。Python附加性能
class Circle:
def __init__(self, middle, radius):
self.m = middle
self.r = radius
在我之間生成N個隨機圓圈並將它們放在'圓圈'列表中。
"""
Makes a list with all the extreme points of the circles.
Format = [Extreme, left/right ~ 0/1 extreme, index]
Seperate function for performance reason, python handles local variables faster.
Garbage collect is temporarily disabled since a bug in Python makes list.append run in O(n) time instead of O(1)
"""
def makeList():
"""gc.disable()"""
list = []
append = list.append
for circle in circles:
append([circle.m[0]-circle.r, 0, circles.index(circle)])
append([circle.m[0] + circle.r, 1, circles.index(circle)])
"""gc.enable()"""
return list
當以50k的圓圈運行時,需要75秒以上才能生成列表。正如你可能在註釋中看到我寫我禁用垃圾收集,把它放在一個單獨的功能,使用
append = list.append
append(foo)
,而不是僅僅
list.append(foo)
我禁用GC,因爲經過一番搜索,似乎有python導致append在O(n)而不是O(c)時間運行的bug。
那麼這種方式是最快的方式還是有辦法讓這個運行更快? 任何幫助,不勝感激。
'list'在python中不是一個好的變量名。 – eumiro 2011-04-14 12:29:39
'list'從來都不是任何語言的好變量名... – 2011-04-14 12:30:44
''「」字符串文字「」「''不是'#comments'。文檔必須放在函數內部,而不是在函數之前。 – 2011-04-14 12:37:43