Por ejemplo, hay una lista, [1,2,3]
con una restricción tal que cada elemento de la lista mezclada no debe superponerse con la ubicación de los elementos anteriores. Para aclarar la explicación, digamos que la lista anterior era [1,2,3]
, pero después de barajar se convierte en [1,3,2]
. Para este caso, dado que 1
es el primer elemento de ambas listas, esto no satisface la restricción. Las salidas que satisfacen esa restricción serían, [2,3,1]
y [3,1,2]
.
¿Hay alguna forma de hacer esta restricción antes de barajar la lista?
Gracias de antemano.
2 respuestas
Según su especificación, lo que está pidiendo son todas las posibles rotaciones de la lista. Por ejemplo:
def rotations(lst):
for i in range(len(lst)):
print(lst)
lst.append(lst.pop(0))
Puede lograr esto rotando la lista. Por ejemplo, las rotaciones de [1, 2, 3]
son [3, 1, 2]
y [2, 3, 1]
.
Tenga en cuenta que para longitudes> 3, las rotaciones serán un subconjunto de todos los cambios posibles que se ajustan a sus restricciones, pero si lo entiendo correctamente, eso funciona para usted. Por ejemplo, con la entrada [1, 2, 3, 4]
, [4, 3, 2, 1]
es una salida válida, pero no una rotación.
collections.deque
facilita la rotación, además está optimizado para la rotación.
random.randrange()
se puede utilizar para aleatorizar la rotación. contar.
import random
import collections
def random_rotation(lst):
"""
Rotate a list by a random amount.
Similar to "random.shuffle()", but ensures that all elements will move.
"""
n = random.randrange(1, len(lst))
d = collections.deque(lst)
d.rotate(n)
lst[:] = d # Overwrite
L = [1, 2, 3, 4]
random_rotation(L)
print(L)
Ejemplo de salida:
[2, 3, 4, 1]
Preguntas relacionadas
Nuevas preguntas
python
Python es un lenguaje de programación multipropósito, de tipificación dinámica y de múltiples paradigmas. Está diseñado para ser rápido de aprender, comprender y usar, y hacer cumplir una sintaxis limpia y uniforme. Tenga en cuenta que Python 2 está oficialmente fuera de soporte a partir del 01-01-2020. Aún así, para preguntas de Python específicas de la versión, agregue la etiqueta [python-2.7] o [python-3.x]. Cuando utilice una variante de Python (por ejemplo, Jython, PyPy) o una biblioteca (por ejemplo, Pandas y NumPy), inclúyala en las etiquetas.