파이썬에서 유사한 객체 컬렉션을 만드는 가장 효율적인 방법/데이터 구조는 무엇입니까? 개체 모음을 만드는 가장 효율적인 방법은 무엇입니까?
예 :
내가 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()
예제를 사용했습니다. 나는
조기 최적화는 모든 악의 뿌리입니다 :)'timeit' 또는'cProfile' it. 실제로 너무 오래 걸리는 경우 다른 옵션에 대해 생각해보십시오. 목록 이해력은이 경우에는 괜찮아 보입니다. – thefourtheye
그렇습니다. 시간이 얼마나 걸릴지 말해 줄 것입니다. 그러나 더 효율적인 방법이 있는지는 알려주지 않을 것입니다 ... – jramm
기본적인 사실부터 시작합시다 : 파이썬은 효율적이지 않습니다. 정말로 더 많은 힘이 필요하면 다른 언어를 사용하십시오 (C++?). 그러나 여전히 충분히 효율적일 수 있습니다. 더 많은 CPU가 필요하다면 다중 처리를 시도하십시오. 데이터를 처리하는 데 더 많은 메모리가 필요한 경우에도 도움이되지 않습니다. 이 경우 작은 작업으로 작업을 분할하고 하나씩 처리하십시오. '클래스 (Class) '접근법은 오버 헤드 인 것처럼 보입니다 (더 간단합니다, 즉 목록 사용). 다른 곳에서도 사용하려는 경우가 아니라면. – freakish