Pythonissa numerosarjan sekoittaminen on aina ollut hyödyllinen apuohjelma ja kysymys, joka on esiintynyt myös monissa yrityssijoitteluhaastatteluissa. Useamman kuin yhden menetelmän tunteminen tämän saavuttamiseksi voi aina olla plussaa. Keskustellaan tietyistä tavoista, joilla tämä voidaan saavuttaa.
Python Satunnainen Sekoita luettelo
Sisään Python, on useita tapoja sekoittaa luettelo. Tässä on useita Python-tapoja listojen sekoittamiseen.
- Sorted()
- Käyttämällä random.shuffle()
- Käyttämällä random.sample()
- Satunnaisvalintamenetelmän käyttäminen
- Fisher-Yates-sekoitusalgoritmin käyttäminen
- Itertools.permutations()-funktion käyttäminen
- NumPyllä
Sekoita luettelo satunnaisesti käyttämällä sorted()
Listasta voidaan tuottaa lajiteltu versio käyttämällä lajiteltu() toiminto. Sekoitamme elementit tehokkaasti satunnaisesti käyttämällä niitä sekoitettuun luettelon kopioon.
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)> |
>
vertaa merkkijonoa javaa
>
Lähtö
Original list: [1, 2, 3, 4, 5] Shuffled list: [2, 3, 4, 5, 1]>
Aika monimutkaisuus: O(nlogn), jossa n on listan pituus
Tilan monimutkaisuus: O(n), missä n on listan pituus
Satunnaista luettelo käyttämällä Random.Shuffle()
Random.Shuffle() on suosituin tapa sekoittaa luettelo. Python satunnaisessa kirjastossaan tarjoaa tämän sisäänrakennetun toiminnon, joka sekoittaa luettelon paikallaan. Tämän haittapuolena on, että listajärjestys menetetään tässä prosessissa. Hyödyllinen kehittäjille, jotka haluavat säästää aikaa ja kiirettä.
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))> |
>
>
Lähtö
The original list is : [1, 4, 5, 6, 3] The shuffled list is : [5, 1, 3, 4, 6]>
Aika monimutkaisuus: O(n), missä n on listan pituus
Tilan monimutkaisuus: O(n), missä n on listan pituus
Satunnaisoi luettelo u laula Random.Sample()
Random.Sample(), Tämä on varsin hyödyllinen toiminto, parempi kuin yllä käytetty sekoitusmenetelmä siinä mielessä, että se luo uuden sekoituslistan ja palauttaa sen sen sijaan, että se häiritsisi alkuperäisen listan järjestystä. Tämä on hyödyllistä tapauksissa, joissa meidän on säilytettävä alkuperäinen luettelo.
Python 3
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))> |
>
>
Lähtö
The original list is : [1, 4, 5, 6, 3] The shuffled list is : [4, 3, 1, 6, 5]>
Aika monimutkaisuus: O(n), missä n on listan pituus
Tilan monimutkaisuus: O(n), missä n on listan pituus
Satunnaista luettelo käyttämällä satunnaisvalintamenetelmää
Tässä menetelmässä satunnaistamme luettelon käyttämällä satunnainen valintamenetelmä . Valitsemme indeksin satunnaisesti ja lisäämme kyseisen hakemiston elementin luetteloon.
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)> |
>
>
Lähtö
Original List: [1, 2, 3, 4, 5, 6] Shuffled List: [1, 5, 2, 6, 3, 4]>
Aika monimutkaisuus: O(n) missä n on listan pituus
Tilan monimutkaisuus: O(1)
Sekoita luettelo satunnaisesti Fisher-Yates Shuffle Algorithm -algoritmilla
Tämä on yksi tunnetuimmista algoritmeista Fisher-Yates Shuffle Algorithm , jota käytetään pääasiassa numerosarjan sekoittamiseen Pythonissa. Tämä algoritmi vain ottaa korkeamman indeksiarvon ja vaihtaa sen nykyiseen arvoon, tämä prosessi toistuu silmukassa luettelon loppuun asti.
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))> |
>
>
Lähtö
The original list is : [1, 4, 5, 6, 3]The shuffled list is : [3, 4, 5, 6, 1]>
Aika monimutkaisuus: O(n), missä n on listan pituus
Tilan monimutkaisuus: O(n), missä n on listan pituus
Satunnaista lista käyttämällä Itertools.Permutations()-funktiota
Tämä menetelmä luo kaikki mahdolliset alkuperäisen luettelon permutaatiot käyttämällä itertools.permutations() toiminto ja valitse sitten satunnainen.
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)> |
>
dijkstra
>
Lähtö
Shuffled list: (6, 5, 4, 1, 3)>
Aika monimutkaisuus: O(n!) missä n on listan pituus, johtuen kaikkien mahdollisten permutaatioiden generoinnista.
Tilan monimutkaisuus: O(n!), koska kaikki mahdolliset permutaatiot luodaan ja tallennetaan luetteloon.
Satunnaista luettelo käyttämällä Numpya
Meillä on käytössä NumPy() sekoittaaksesi luettelon kohteet. Jos haluat satunnaistaa luettelon numpylla, meidän on muunnettava luettelo NumPy-taulukoksi ja käytettävä sitten vähennystoimintoa, jolloin se palauttaa sekoitettu luettelo ja tulostaa sekoitettu luettelo.
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()))> |
>
>
Lähtö
The original list is : [1, 4, 5, 6, 3] The shuffled list is : [3, 6, 1, 5, 4]>
Aika monimutkaisuus: Reduction()-funktion aikamonimutkaisuus riippuu iteraatioiden määrästä, joka on yhtä suuri kuin listan pituus. Parametrin np.random.permutation() aikamonimutkaisuus on O(n), jossa n on syötetaulukon pituus. Siksi tämän koodin aikamonimutkaisuus on O(n^2).
Tilan monimutkaisuus: Tämän koodin monimutkaisuus riippuu luettelon koosta. Luettelo tallennetaan muistiin muutamien reduction()-funktion käyttämien lisämuuttujien kanssa. Siksi avaruuden kompleksisuus on O(n).