logo

Python | Modalități de a amesteca o listă

În Python, amestecarea unei secvențe de numere a fost întotdeauna o utilitate utilă și întrebarea care a apărut și în multe interviuri de plasare a companiei. Cunoașterea mai multor metode pentru a realiza acest lucru poate fi întotdeauna un plus. Să discutăm anumite moduri în care acest lucru poate fi realizat.

Python Aleatoriu o listă

În Piton, există mai multe moduri de a amesteca o listă. Iată mai multe moduri Python pentru amestecarea listelor.



  • Folosind sortat()
  • Folosind random.shuffle()
  • Folosind random.sample()
  • Folosind metoda de selecție aleatorie
  • Utilizarea algoritmului de amestecare Fisher-Yates
  • Folosind funcția itertools.permutations().
  • Folosind NumPy

Amestecă aleatoriu o listă folosind sorted()

O versiune sortată a listei poate fi produsă folosind sortat() funcţie. Amestecăm efectiv elementele în mod aleatoriu, utilizându-le pe o copie a listei care a fost amestecată.

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

>

>

Ieșire

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

Complexitatea timpului: O(nlogn), unde n este lungimea listei
Complexitatea spațiului: O(n), unde n este lungimea listei

Randomizați o listă folosind Random.Shuffle()

Random.Shuffle() este cea mai recomandată metodă de a amesteca o listă. Python în biblioteca sa aleatorie oferă această funcție încorporată care amestecă în loc lista. Dezavantajul acestui lucru este că ordonarea listelor se pierde în acest proces. Util pentru dezvoltatorii care aleg să economisească timp și forță.

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

>

>

Ieșire

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

Complexitatea timpului: O(n), unde n este lungimea listei
Complexitatea spațiului: O(n), unde n este lungimea listei

Randomizați o listă u cântați Random.Sample()

Random.Sample(), Aceasta este o funcție destul de utilă, mai bună decât metoda de amestecare folosită mai sus, deoarece creează o nouă listă amestecată și o returnează mai degrabă decât să perturbe ordinea listei originale. Acest lucru este util în cazurile în care trebuie să păstrăm lista originală.

Python3

arbore binar




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

>

>

Ieșire

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

Complexitatea timpului: O(n), unde n este lungimea listei
Complexitatea spațiului: O(n), unde n este lungimea listei

Randomizați o listă folosind metoda de selecție aleatorie

În această metodă, vom randomiza o listă folosind metoda de selecție aleatorie . Selectăm un index aleatoriu și anexăm acel element la acel index la listă.

Python3

coada de prioritate




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

>

>

Ieșire

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

Complexitatea timpului: O(n) unde n este lungimea listei
Complexitatea spațiului: O(1)

Amestecați aleatoriu o listă folosind algoritmul de amestecare Fisher-Yates

Acesta este unul dintre algoritmii faimoși Algoritmul de amestecare Fisher-Yates , folosit în principal pentru a amesteca o secvență de numere în Python. Acest algoritm ia doar valoarea mai mare a indexului și o schimbă cu valoarea curentă, acest proces se repetă într-o buclă până la sfârșitul listei.

Python3




sortarea cochiliei

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

>

>

Ieșire

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

Complexitatea timpului: O(n), unde n este lungimea listei
Complexitatea spațiului: O(n), unde n este lungimea listei

Randomizați o listă folosind funcția Itertools.Permutations().

Această metodă generează toate permutările posibile ale listei originale folosind itertools.permutations() funcția, apoi selectați una aleatorie.

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

>

>

Ieșire

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

Complexitatea timpului: O(n!) unde n este lungimea listei, datorită generării tuturor permutărilor posibile.
Complexitatea spațiului: O(n!) deoarece toate permutările posibile sunt generate și stocate într-o listă.

Randomizați o listă folosind Numpy

Noi folosim NumPy() pentru a amesteca elementele din listă. Pentru a randomiza o listă folosind numpy, trebuie să convertim lista în matrice NumPy și apoi să aplicăm funcția reduce și returnează lista amestecată și imprimă lista amestecată.

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

>

>

Ieșire

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

Complexitatea timpului: Complexitatea de timp a funcției reduce() depinde de numărul de iterații, care este egal cu lungimea listei. Complexitatea de timp a lui np.random.permutation() este O(n) unde n este lungimea matricei de intrare. Prin urmare, complexitatea de timp a acestui cod este O(n^2).
Complexitatea spațiului: Complexitatea spațială a acestui cod depinde de dimensiunea listei. Lista este stocată în memorie împreună cu câteva variabile suplimentare utilizate de funcția reduce(). Prin urmare, complexitatea spațiului este O(n).

diferența dintre două șiruri python