まあ、博士ゾイドバーグは、あなたが注文に興味があるならば、あなたは順序を保つ構造にあなたのデータを格納する必要があり、また簡単に回転することができます。 リストでは、Pythonでそれができます。
リストの最小の要素を見つけて、最小の要素が最初に来るまで、比較する各リストを回転させます。注:これはソートではなく、回転です。比較のためのすべてのリストが標準化されているので、任意の2つの間の直線リスト比較は、回転後も同じであるかどうかを判断します。
>>> def rotcomp(lst1, lst2):
while min(lst1) != lst1[0]:
lst1 = lst1[1:] + [lst1[0]]
while min(lst2) != lst2[0]:
lst2 = lst2[1:] + [lst2[0]]
return lst1 == lst2
>>> rotcomp(list('ABCD'), list('CDAB'))
True
>>> rotcomp(list('ABCD'), list('CDBA'))
False
>>>
>>> rotcomp(list('AABC'), list('ABCA'))
False
>>> def rotcomp2(lst1, lst2):
return repr(lst1)[1:-1] in repr(lst2 + lst2)
>>> rotcomp2(list('ABCD'), list('CDAB'))
True
>>> rotcomp2(list('ABCD'), list('CDBA'))
False
>>> rotcomp2(list('AABC'), list('ABCA'))
True
>>>
NEWセクション:デュプリケート?
入力に重複が含まれている可能性があります(質問の下に記載されている双子の質問から)。アルゴリズムは、一方のリストがもう一方のリストのサブリストであるかどうかを確認することです。
関数rotcomp2は、そのアルゴリズムとリスト内容のreprのテキスト比較を使用します。
[Pythonで2つのリストが循環的に同一であるかどうかをチェックする方法](http://stackoverflow.com/questions/26924836/how-to-check-whether-two-lists-are-circularly-identical- in-python) –