I have a circle-growth algorithm (line-growth with closed links) where new points are added between existing points at each iteration.
The linkage information of each point is stored as a tuple in a list. That list is updated iteratively.
What would be the most efficient way to return the spatial order of these points as a list ?
Do I need to compute the whole order at each iteration or is there a way to cumulatively insert the new points in a orderly manner into that list ?
All I could come up with is the following:
tuples = [(1, 4), (2, 5), (3, 6), (1, 6), (0, 7), (3, 7), (0, 8), (2, 8), (5, 9), (4, 9)] starting_tuple = [e for e in tuples if e == 0] ## note: 'starting_tuple' could be either (0, 7) or (0, 8), starting direction doesn't matter order = [starting_tuple, starting_tuple] ## order will always start from point 0 idx = tuples.index(starting_tuple) ## index of the starting tuple def findNext(): global idx for i, e in enumerate(tuples): if order[-1] in e and i != idx: ind = e.index(order[-1]) c = 0 if ind == 1 else 1 order.append(e[c]) idx = tuples.index(e) for i in range(len(tuples)/2): findNext() print order
It is working but it is neither elegant (non pythonic) nor efficient. It seems to me that a recursive algorithm may be more suitable but unfortunately I don't know how to implement such solution.
Also, please note that I'm using Python 2 and can only have access to full python packages (no numpy).
This question has also been posted on SO.