Lukas Barth <m...@tinloaf.de>: > I have a list of numbers that I treat as "circular", i.e. [1,2,3] and > [2,3,1] should be the same. Now I want to rotate these to a well defined > status, so that I can can compare them. > > If all elements are unique, the solution is easy: find the minimum > element, find its index, then use mylist[:index] + mylist[index:], i.e. > the minimum element will always be at the beginning. > > But say I have [0,1,0,2,0,3]. I can in fact guarantee that no *pair* > will appear twice in that list, i.e. I could search for the minimum, if > that is unique go on as above, otherwise find *all* positions of the > minimum, see which is followed by the smallest element, and then rotate > that position to the front. > > Now that seems an awful lot of code for a (seemingly?) simple problem. > Is there a nice, pythonic way to do this?
How about: ======================================================================== def circularly_equal(l1, l2): length = len(l1) if length != len(l2): return False twice = l1 + l1 for i in range(length): if twice[i:i + length] == l2: return True return False ======================================================================== Marko -- https://mail.python.org/mailman/listinfo/python-list