logo

Python | Maneres de barrejar una llista

A Python, barrejar una seqüència de números sempre ha estat una utilitat útil i la pregunta que també ha aparegut en moltes entrevistes de col·locació d'empreses. Conèixer més d'un mètode per aconseguir-ho sempre pot ser un avantatge. Parlem de certes maneres d'aconseguir-ho.

Python Aleatori aleatori una llista

En Python, hi ha diverses maneres de barrejar una llista. Aquí hi ha diverses maneres de Python per remenar llistes.



  • Utilitzant ordenat()
  • Utilitzant random.shuffle()
  • Utilitzant random.sample()
  • Utilitzant el mètode de selecció aleatòria
  • Ús de l'algoritme de barreja de Fisher-Yates
  • Utilitzant la funció itertools.permutations().
  • Utilitzant NumPy

Barreja aleatòriament una llista amb sorted()

Es pot produir una versió ordenada de la llista utilitzant el ordenat () funció. Barregem efectivament els elements de manera aleatòria utilitzant-los en una còpia de la llista que s'ha barrejat.

Python 3








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)>

>

>

Sortida

Original list: [1, 2, 3, 4, 5] Shuffled list: [2, 3, 4, 5, 1]>

Complexitat temporal: O(nlogn), on n és la longitud de la llista
Complexitat espacial: O(n), on n és la longitud de la llista

Aleatoritzar una llista amb Random.Shuffle()

Random.Shuffle() és el mètode més recomanat per barrejar una llista. Python a la seva biblioteca aleatòria proporciona aquesta funció integrada que barreja la llista al lloc. L'inconvenient d'això és que l'ordenació de la llista es perd en aquest procés. Útil per als desenvolupadors que decideixen estalviar temps i pressa.

Python 3




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))>

>

>

Sortida

The original list is : [1, 4, 5, 6, 3] The shuffled list is : [5, 1, 3, 4, 6]>

Complexitat temporal: O(n), on n és la longitud de la llista
Complexitat espacial: O(n), on n és la longitud de la llista

Aleatoritzar una llista u canta Random.Sample()

Mostra aleatòria (), Aquesta és una funció força útil, millor que el mètode de barreja utilitzat anteriorment, ja que crea una nova llista barrejada i la retorna en lloc de pertorbar l'ordre de la llista original. Això és útil en els casos en què necessitem conservar la llista original.

Python 3

inclou programació en c




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))>

>

>

Sortida

The original list is : [1, 4, 5, 6, 3] The shuffled list is : [4, 3, 1, 6, 5]>

Complexitat temporal: O(n), on n és la longitud de la llista
Complexitat espacial: O(n), on n és la longitud de la llista

Aleatoritzar una llista mitjançant el mètode de selecció aleatòria

En aquest mètode, aleatoritzarem una llista utilitzant mètode de selecció aleatòria . Seleccionem un índex aleatòriament i afegim aquest element a aquest índex a la llista.

Python 3




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)>

>

>

Sortida

Original List: [1, 2, 3, 4, 5, 6] Shuffled List: [1, 5, 2, 6, 3, 4]>

Complexitat temporal: O(n) on n és la longitud de la llista
Complexitat espacial: O(1)

Barreja aleatòriament una llista utilitzant l'algoritme de barreja de Fisher-Yates

Aquest és un dels algorismes famosos que és Algoritme de barreja de Fisher-Yates , emprat principalment per barrejar una seqüència de números en Python. Aquest algorisme només pren el valor d'índex més alt i l'intercanvia amb el valor actual, aquest procés es repeteix en un bucle fins al final de la llista.

Python 3




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))>

>

>

Sortida

The original list is : [1, 4, 5, 6, 3]The shuffled list is : [3, 4, 5, 6, 1]>

Complexitat temporal: O(n), on n és la longitud de la llista
Complexitat espacial: O(n), on n és la longitud de la llista

Aleatoritzar una llista utilitzant la funció Itertools.Permutations().

Aquest mètode genera totes les permutacions possibles de la llista original utilitzant el itertools.permutations() funció i, a continuació, seleccioneu-ne una aleatòria.

Python 3




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)>

>

t xancleta

>

Sortida

Shuffled list: (6, 5, 4, 1, 3)>

Complexitat temporal: O(n!) on n és la longitud de la llista, a causa de la generació de totes les permutacions possibles.
Complexitat espacial: O(n!) ja que es generen i s'emmagatzemen en una llista totes les permutacions possibles.

Aleatoritzar una llista utilitzant Numpy

Estem utilitzant NumPy() per barrejar els elements de la llista. Per aleatoritzar una llista amb numpy , hem de convertir la llista a la matriu NumPy i després aplicar la funció reduce i retorna la llista barrejada i imprimeix la llista barrejada.

Python 3




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()))>

>

>

Sortida

The original list is : [1, 4, 5, 6, 3] The shuffled list is : [3, 6, 1, 5, 4]>

Complexitat temporal: La complexitat temporal de la funció reduce() depèn del nombre d'iteracions, que és igual a la longitud de la llista. La complexitat temporal de np.random.permutation() és O(n) on n és la longitud de la matriu d'entrada. Per tant, la complexitat temporal d'aquest codi és O(n^2).
Complexitat espacial: La complexitat espacial d'aquest codi depèn de la mida de la llista. La llista s'emmagatzema a la memòria juntament amb algunes variables addicionals utilitzades per la funció reduce(). Per tant, la complexitat espacial és O(n).