Î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