在python中创建类似对象集合的最有效的方法/数据结构是什么?创建对象集合的最有效方法?
实施例:
假设我有一个数Point()
实例。每个实例都有一个x
属性。
我想将它们组合一起,以执行批量操作等
我可能只是把他们都在一个列表:
points = [Point(x=1), Point(4), Point(7)... Point(1)]
我可以创建一个类,只是需要这个列表作为输入:
Class PointCollection():
def __init__(self, points):
""" points is a list of Point() instances """
self.points = points
为了访问所有的x
属性,类可能有一个看起来像这样的方法:
@property
def allX(self):
return [pnt.x for pnt in self.points]
我的问题是,有没有更好的方法?我可以想象,对于有大量点的集合来说,具有需要循环访问的属性可能需要一些时间来计算。在更复杂的集合中,您可能有许多属性,或者更深层的嵌套属性(集合集合?)。
是否有更好的数据结构来实现?或者更好地转向使用Cython和/或多处理来获得更多性能?
编辑:
这里是关于我的具体问题,更详细一点:
这涉及到一些GIS数据结构 - 即其描述支流类。这些集合将描述一个河流网络,并且我将考虑访问像整个网络的属性(如每个支流的x坐标或'里程')来执行批量操作。
但是,我想创建一个非常普遍的“集合”结构的'最佳'方法,这就是我使用Point()
示例的原因。我可以看到这是在其他方面我的工作很有用...
Prematured优化是所有邪恶的根源:)'timeit'或'cProfile'它。如果真的花费太长时间,那么考虑其他选项。在这种情况下,列表理解看起来没问题。 – thefourtheye
好的,timeit会告诉我需要多长时间。但它不会告诉我是否有更高效的方法... – jramm
让我们从基本事实开始:Python效率不高。如果你真的需要更多的权力,使用一些其他语言(C++?)。但它仍然可能足够高效。如果你需要更多的CPU,然后尝试多处理。如果你需要更多的内存来处理数据,它不会对你有所帮助。在这种情况下,将任务分解为更小的任务并逐个处理它们。 “类”方法似乎是一种开销(简单更好,即使用列表)。除非你打算在其他地方使用它。 – freakish