logo

Python | Veidi, kā sajaukt sarakstu

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