-2

I have a list of integer tuples like this:

L=[(1,2),(7,6),(2,3),(8,5),(3,8),(5,7)]

Each pair defines an edge between two vertices and I want to find the vertex connectivity. There are no loops, the tuples always uniquely link up like dominoes so in this case the sorted list should look like:

L_sorted=[(1,2),(2,3),(3,8),(8,5),(5,7),(7,6)]

Or alternatively

L_sorted=[1,2,3,8,5,7,6]

Is there an efficient way to do sorting like this in Python using predefined methods?

harshil9968
  • 3,254
  • 1
  • 16
  • 26
Alienor
  • 11
  • "Using predefined methods," you could check out [NetworkX](https://networkx.github.io/). – blacksite Dec 14 '16 at 13:30
  • @blacksite Was trying with this networkx but such sorting works wrong there or couldn;t find appropriate function – Peter.k Feb 11 '22 at 06:23

2 Answers2

1

I do not think that any built-in facility can solve this. Third-party libraries might help. You can solve it in pure python:

L=[(1,2),(7,6),(2,3),(8,5),(3,8),(5,7)]
def domino(l):
    start = cursor = l[0][0]
    d = dict(l)
    while True:
        yield cursor
        try:
            cursor = d[cursor]
        except KeyError:
            # return here if your input may be non-cyclic.
            raise
        if cursor==start:
            return
x = list(domino(L))
# raises KeyError because 6 is dangling...

... or brew some C code using ctypes.

Torben Klein
  • 2,943
  • 1
  • 19
  • 24
-2

Look at the built-in function sorted.

EvertW
  • 1,160
  • 9
  • 18