Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
556 views
in Technique[技术] by (71.8m points)

Sorting tuples in Python like dominoes/ finding vertex connectivity

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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

1.4m articles

1.4m replys

5 comments

57.0k users

...