Programmā Python skaitļu secības jaukšana vienmēr ir bijusi noderīga lietderība un jautājums, kas ir parādījies arī daudzās uzņēmumu izvietošanas intervijās. Zināt vairāk nekā vienu metodi, lai to sasniegtu, vienmēr var būt pluss. Apspriedīsim dažus veidus, kā to panākt.
Python izlases veida jaukts saraksts
In Python, ir vairāki veidi, kā jaukt sarakstu. Šeit ir dažādi Python veidi sarakstu jaukšanai.
- Izmantojot sorted()
- Izmantojot random.shuffle()
- Izmantojot random.sample()
- Izmantojot nejaušās atlases metodi
- Izmantojot Fišera-Yates jaukšanas algoritmu
- Funkcijas itertools.permutations() izmantošana
- Izmantojot NumPy
Jauktā secībā sarakstu, izmantojot sorted()
Sakārtotu saraksta versiju var izveidot, izmantojot sakārtots() funkciju. Mēs efektīvi sajaucam elementus nejauši, izmantojot tos sajauktā saraksta kopijā.
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)> |
>
>
Izvade
Original list: [1, 2, 3, 4, 5] Shuffled list: [2, 3, 4, 5, 1]>
Laika sarežģītība: O(nlogn), kur n ir saraksta garums
Kosmosa sarežģītība: O(n), kur n ir saraksta garums
Saraksta nejauša izvēle, izmantojot Random.Shuffle()
Random.Shuffle() ir ieteicamākā metode saraksta jaukšanai. Python savā nejaušajā bibliotēkā nodrošina šo iebūvēto funkciju, kas lokā sajauc sarakstu. Tā trūkums ir tāds, ka šajā procesā tiek zaudēta saraksta pasūtīšana. Noderīgi izstrādātājiem, kuri izvēlas ietaupīt laiku un steigas.
robotu sastāvdaļas
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))> |
>
>
Izvade
The original list is : [1, 4, 5, 6, 3] The shuffled list is : [5, 1, 3, 4, 6]>
Laika sarežģītība: O(n), kur n ir saraksta garums
Kosmosa sarežģītība: O(n), kur n ir saraksta garums
Randomizēt sarakstu u dziedāt Random.Sample()
Random.Sample(), Šī ir diezgan noderīga funkcija, kas ir labāka par iepriekš izmantoto jaukšanas metodi, jo tā izveido jaunu jauktu sarakstu un atgriež to, nevis traucē sākotnējā saraksta secību. Tas ir noderīgi gadījumos, kad mums ir jāsaglabā sākotnējais saraksts.
Python3
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))> |
>
>
Izvade
The original list is : [1, 4, 5, 6, 3] The shuffled list is : [4, 3, 1, 6, 5]>
Laika sarežģītība: O(n), kur n ir saraksta garums
Kosmosa sarežģītība: O(n), kur n ir saraksta garums
Izlases secībā izveidojiet sarakstu, izmantojot nejaušās atlases metodi
Izmantojot šo metodi, mēs randomizēsim sarakstu, izmantojot nejaušās atlases metode . Mēs nejauši atlasām indeksu un pievienojam šo elementu sarakstam šajā rādītājā.
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)> |
>
>
Izvade
Original List: [1, 2, 3, 4, 5, 6] Shuffled List: [1, 5, 2, 6, 3, 4]>
Laika sarežģītība: O(n) kur n ir saraksta garums
Kosmosa sarežģītība: O(1)
Jauktā secībā sarakstu, izmantojot Fišera-Yates jaukšanas algoritmu
Šis ir viens no slavenākajiem algoritmiem Fišera-Yatesa jaukšanas algoritms , ko galvenokārt izmanto, lai sajauktu skaitļu secību Python. Šis algoritms tikai ņem augstāko indeksa vērtību un apmaina to ar pašreizējo vērtību, šis process atkārtojas cilpā līdz saraksta beigām.
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))> |
>
>
Izvade
The original list is : [1, 4, 5, 6, 3]The shuffled list is : [3, 4, 5, 6, 1]>
Laika sarežģītība: O(n), kur n ir saraksta garums
Kosmosa sarežģītība: O(n), kur n ir saraksta garums
Izlases secībā izveidojiet sarakstu, izmantojot Itertools.Permutations() funkciju
Šī metode ģenerē visas iespējamās sākotnējā saraksta permutācijas, izmantojot itertools.permutations() funkciju un pēc tam atlasiet nejaušu.
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)> |
>
java prioritātes rinda
>
Izvade
Shuffled list: (6, 5, 4, 1, 3)>
Laika sarežģītība: O(n!) kur n ir saraksta garums visu iespējamo permutāciju ģenerēšanas dēļ.
Kosmosa sarežģītība: O(n!), jo visas iespējamās permutācijas tiek ģenerētas un saglabātas sarakstā.
Randomizēt sarakstu izmantojot Numpy
Mēs lietojam NumPy() lai sajauktu vienumus sarakstā. Lai randomizētu sarakstu, izmantojot numpy, mums saraksts ir jāpārvērš par NumPy masīvu un pēc tam jāpiemēro samazināšanas funkcija, un tas atgriež jaukto sarakstu un izdrukā jaukto sarakstu.
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()))> |
>
>
Izvade
The original list is : [1, 4, 5, 6, 3] The shuffled list is : [3, 6, 1, 5, 4]>
Laika sarežģītība: Redukcijas() funkcijas laika sarežģītība ir atkarīga no iterāciju skaita, kas ir vienāds ar saraksta garumu. np.random.permutation() laika sarežģītība ir O(n), kur n ir ievades masīva garums. Tāpēc šī koda laika sarežģītība ir O(n^2).
Kosmosa sarežģītība: Šī koda sarežģītība ir atkarīga no saraksta lieluma. Saraksts tiek glabāts atmiņā kopā ar dažiem papildu mainīgajiem, ko izmanto funkcija samazināt (). Tāpēc telpas sarežģītība ir O (n).