Si tenemos una lista de elementos, por ejemplo:

>>> l = [ 2, 3, 5, 7, 11, 13, 17, 19 ]

Deck Card Shuffler

Y queremos desordenarla, pero con la condición de que ningún elemento ocupe la misma posición que ocupaba originalmente, podemos aplicar el algoritmo de Sottolo:

>>> from random import randrange
>>> def sattoloCycle(items):
...     i = len(items)
...     while i > 1:
...         i = i - 1
...         j = randrange(i)  # 0 < = j <= i-1
...         items[j], items[i] = items[i], items[j]
...     return

>>> sattoloCycle(l)
>>> print l
[5, 17, 3, 2, 7, 11, 13]

Entradas relacionadas


Published

Category

dev

Tags

Contacto