パーフェクトシャッフル

>>> def shuffle(xs):
...     before = xs[:len(xs) / 2]
...     after = xs[len(xs) / 2:]
...     shuffled = []
...     for i in range(len(xs) / 2):
...             shuffled.append(before[i])
...             shuffled.append(after[i])
...     return shuffled
... 
>>> shuffle([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
[1, 6, 2, 7, 3, 8, 4, 9, 5, 10]
>>> def check(n):
...     cards = range(n)
...     xs = cards
...     for i in range(n * 2):
...             xs = shuffle(xs)
...             if xs == cards:
...                     return i + 1
... 
>>> check(52)
8
>>> check(54)
52
>>> [check(x) for x in range(2, 200, 2)]
[1, 2, 4, 3, 6, 10, 12, 4, 8, 18, 6, 11, 20, 18, 28, 5, 10, 12, 36, 12, 20, 14, 12, 23, 21, 8, 52, 20, 18, 58, 60, 6, 12, 66, 22, 35, 9, 20, 30, 39, 54, 82, 8, 28, 11, 12, 10, 36, 48, 30, 100, 51, 12, 106, 36, 36, 28, 44, 12, 24, 110, 20, 100, 7, 14, 130, 18, 36, 68, 138, 46, 60, 28, 42, 148, 15, 24, 20, 52, 52, 33, 162, 20, 83, 156, 18, 172, 60, 58, 178, 180, 60, 36, 40, 18, 95, 96, 12, 196]