Search code examples
pythoniterationround-robin

Python "round robin"


Given multiple (x,y) ordered pairs, I want to compare distances between each one of them. So pretend I have a list of ordered pairs:

pairs = [a,b,c,d,e,f]

I have a function that takes two ordered pairs and find the distance between them:

def distance(a,b):
    from math import sqrt as sqrt
    from math import pow as pow
    d1 = pow((a[0] - b[0]),2)
    d2 = pow((a[1] - b[1]),2)
    distance = sqrt(d1 + d2)
    return distance

How can I use this function to compare every ordered pair to every other ordered pair, ultimately finding the two ordered-pairs with the greatest distance between them?

Psuedopsuedocode:

     distance(a,b)
     distance(a,c)
     ...
     distance(e,f)

Any help would be tremendously appreciated.


Solution

  • try:
    
        from itertools import combinations
    
    except ImportError:
    
        def combinations(l, n):
            if n != 2: raise Exception('This placeholder only good for n=2')
            for i in range(len(l)):
                for j in range(i+1, len(l)):
                    yield l[i], l[j]
    
    
    coords_list = [(0,0), (3,4), (6,8)]
    
    def distance(p1, p2):
        return ( ( p2[0]-p1[0] ) ** 2 + ( p2[1]-p1[1] )**2 ) ** 0.5
    
    largest_distance, (p1, p2) = max([
         (distance(p1,p2), (p1, p2)) for (p1,p2) in combinations(coords_list, 2)
         ])
    
    
    print largest_distance, p1, p2