En Python, mezclar una secuencia de números siempre ha sido una utilidad útil y la pregunta que también ha aparecido en muchas entrevistas de colocación en empresas. Conocer más de un método para lograrlo siempre puede ser una ventaja. Analicemos ciertas formas en que esto se puede lograr.
Python mezcla aleatoriamente una lista
En Pitón, Hay varias formas de mezclar una lista. Aquí hay varias formas de Python para mezclar listas.
- Usando ordenado()
- Usando aleatorio.shuffle()
- Usando muestra aleatoria ()
- Usando el método de selección aleatoria
- Usando el algoritmo aleatorio de Fisher-Yates
- Usando la función itertools.permutations()
- Usando NumPy
Mezclar aleatoriamente una lista usando sorted()
Se puede producir una versión ordenada de la lista utilizando el ordenado() función. Efectivamente mezclamos los elementos aleatoriamente usándolos en una copia de la lista que ha sido mezclada.
Python3
import> random> my_list>=> [>1>,>2>,>3>,>4>,>5>]> shuffled_list>=> sorted>(my_list, key>=>lambda> x: random.random())> print>(>'Original list:'>, my_list)> print>(>'Shuffled list:'>, shuffled_list)> |
>
>
Producción
Original list: [1, 2, 3, 4, 5] Shuffled list: [2, 3, 4, 5, 1]>
Complejidad del tiempo: O(nlogn), donde n es la longitud de la lista
Complejidad espacial: O(n), donde n es la longitud de la lista
Aleatorizar una lista usando Random.Shuffle()
Aleatorio.Aleatorio() es el método más recomendado para mezclar una lista. Python en su biblioteca aleatoria proporciona esta función incorporada que baraja la lista en el lugar. El inconveniente de esto es que el orden de las listas se pierde en este proceso. Útil para desarrolladores que optan por ahorrar tiempo y esfuerzo.
Python3
import> random> test_list>=> [>1>,>4>,>5>,>6>,>3>]> print>(>'The original list is : '> +> str>(test_list))> # using random.shuffle() to shuffle a list> random.shuffle(test_list)> print>(>'The shuffled list is : '> +> str>(test_list))> |
>
>
Producción
The original list is : [1, 4, 5, 6, 3] The shuffled list is : [5, 1, 3, 4, 6]>
Complejidad del tiempo: O(n), donde n es la longitud de la lista
Complejidad espacial: O(n), donde n es la longitud de la lista
Aleatorizar una lista u cantar Random.Sample()
Muestra aleatoria(), Esta es una función bastante útil, mejor que el método aleatorio utilizado anteriormente en el sentido de que crea una nueva lista aleatoria y la devuelve en lugar de alterar el orden de la lista original. Esto es útil en los casos en que necesitamos conservar la lista original.
Python3
reaccionar estilo en línea
import> random> test_list>=> [>1>,>4>,>5>,>6>,>3>]> print>(>'The original list is : '> +> str>(test_list))> # using random.sample()to shuffle a list> res>=> random.sample(test_list,>len>(test_list))> print>(>'The shuffled list is : '> +> str>(res))> |
>
>
Producción
The original list is : [1, 4, 5, 6, 3] The shuffled list is : [4, 3, 1, 6, 5]>
Complejidad del tiempo: O(n), donde n es la longitud de la lista
Complejidad espacial: O(n), donde n es la longitud de la lista
Aleatorizar una lista usando el método de selección aleatoria
En este método, aleatorizaremos una lista usando método de selección aleatoria . Seleccionamos un índice al azar y agregamos ese elemento en ese índice a la lista.
Python3
import> random> arr>=> [>1>,>2>,>3>,>4>,>5>,>6>]> print>(>'Original List: '>, arr)> n>=> len>(arr)> for> i>in> range>(n):> >j>=> random.randint(>0>, n>->1>)> >element>=> arr.pop(j)> >arr.append(element)> > print>(>'Shuffled List: '>, arr)> |
>
>
Producción
Original List: [1, 2, 3, 4, 5, 6] Shuffled List: [1, 5, 2, 6, 3, 4]>
Complejidad del tiempo: O(n) donde n es la longitud de la lista
Complejidad espacial: O(1)
Mezclar aleatoriamente una lista utilizando el algoritmo de mezcla aleatoria de Fisher-Yates
Este es uno de los famosos algoritmos que es Algoritmo aleatorio de Fisher-Yates , empleado principalmente para mezclar una secuencia de números en Python. Este algoritmo simplemente toma el valor del índice más alto y lo intercambia con el valor actual; este proceso se repite en un bucle hasta el final de la lista.
Python3
import> random> test_list>=> [>1>,>4>,>5>,>6>,>3>]> print>(>'The original list is : '> +> str>(test_list))> # using Fisher–Yates shuffle Algorithm to shuffle a list> for> i>in> range>(>len>(test_list)>->1>,>0>,>->1>):> ># Pick a random index from 0 to i> >j>=> random.randint(>0>, i>+> 1>)> ># Swap arr[i] with the element at random index> >test_list[i], test_list[j]>=> test_list[j], test_list[i]> print>(>'The shuffled list is : '> +> str>(test_list))> |
>
>
Producción
The original list is : [1, 4, 5, 6, 3]The shuffled list is : [3, 4, 5, 6, 1]>
Complejidad del tiempo: O(n), donde n es la longitud de la lista
Complejidad espacial: O(n), donde n es la longitud de la lista
Aleatorizar una lista usando la función Itertools.Permutations()
Este método genera todas las permutaciones posibles de la lista original utilizando el itertools.permutaciones() función y luego seleccione una aleatoria.
Python3
import> random> import> itertools> lst>=> [>1>,>4>,>5>,>6>,>3>]> permutations>=> list>(itertools.permutations(lst))> shuffled_lst>=> random.choice(permutations)> print>(>'Shuffled list:'>, shuffled_lst)> |
>
fusionar ordenar java
>
Producción
Shuffled list: (6, 5, 4, 1, 3)>
Complejidad del tiempo: O(n!) donde n es la longitud de la lista, debido a la generación de todas las permutaciones posibles.
Complejidad espacial: O(n!) ya que todas las permutaciones posibles se generan y almacenan en una lista.
Aleatorizar una lista usando números
Estamos usando NumPy() para mezclar los elementos de la lista. Para aleatorizar una lista usando numpy, tenemos que convertir la lista a una matriz NumPy y luego aplicar la función de reducción y devuelve la lista aleatoria e imprime la lista aleatoria.
Python3
import> numpy as np> from> functools>import> reduce> test_list>=> [>1>,>4>,>5>,>6>,>3>]> # Printing original list> print>(>'The original list is : '> +> str>(test_list))> # using reduce() and numpy to shuffle a list> res>=> reduce>(>lambda> acc, _: np.random.permutation(acc),> >range>(>len>(test_list)), np.array(test_list))> print>(>'The shuffled list is : '> +> str>(res.tolist()))> |
>
>
Producción
The original list is : [1, 4, 5, 6, 3] The shuffled list is : [3, 6, 1, 5, 4]>
Complejidad del tiempo: La complejidad temporal de la función reduce() depende del número de iteraciones, que es igual a la longitud de la lista. La complejidad temporal de np.random.permutation() es O(n) donde n es la longitud de la matriz de entrada. Por lo tanto, la complejidad temporal de este código es O (n ^ 2).
Complejidad espacial: La complejidad espacial de este código depende del tamaño de la lista. La lista se almacena en la memoria junto con algunas variables adicionales utilizadas por la función reducir(). Por tanto, la complejidad espacial es O(n).