V Pythonu je bilo mešanje zaporedja številk vedno koristen pripomoček in vprašanje, ki se je pojavilo tudi na številnih razgovorih za zaposlitev v podjetju. Poznavanje več kot ene metode za dosego tega je vedno lahko plus. Razpravljajmo o nekaterih načinih, kako je to mogoče doseči.
Python naključno premeša seznam
noter Python, seznam lahko premešate na več načinov. Tukaj so različni načini Python za mešanje seznamov.
izberite iz več tabel v sql
- Uporaba sorted()
- Uporaba random.shuffle()
- Uporaba random.sample()
- Uporaba metode naključnega izbora
- Uporaba Fisher-Yatesovega algoritma shuffle
- Uporaba funkcije itertools.permutations().
- Uporaba NumPy
Naključno premešaj seznam z uporabo sorted()
Razvrščeno različico seznama lahko ustvarite z uporabo razvrščeno() funkcijo. Elemente dejansko naključno premešamo tako, da jih uporabimo na kopiji seznama, ki je bil premešan.
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)> |
>
>
Izhod
Original list: [1, 2, 3, 4, 5] Shuffled list: [2, 3, 4, 5, 1]>
Časovna zapletenost: O(nlogn), kjer je n dolžina seznama
Kompleksnost prostora: O(n), kjer je n dolžina seznama
Naključno uredite seznam z uporabo Random.Shuffle()
Random.Shuffle() je najbolj priporočljiva metoda za mešanje seznama. Python v svoji naključni knjižnici nudi to vgrajeno funkcijo, ki na mestu premeša seznam. Pomanjkljivost tega je, da se v tem procesu izgubi vrstni red seznama. Uporabno za razvijalce, ki se odločijo prihraniti čas in vrvež.
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))> |
>
>
Izhod
The original list is : [1, 4, 5, 6, 3] The shuffled list is : [5, 1, 3, 4, 6]>
Časovna zapletenost: O(n), kjer je n dolžina seznama
Kompleksnost prostora: O(n), kjer je n dolžina seznama
Naključni seznam u poj Random.Sample()
Random.Sample(), To je precej uporabna funkcija, boljša od metode naključnega predvajanja, uporabljene zgoraj, v tem smislu, da ustvari nov premešan seznam in ga vrne, namesto da bi motil vrstni red prvotnega seznama. To je uporabno v primerih, ko moramo obdržati izvirni seznam.
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))> |
>
>
Izhod
The original list is : [1, 4, 5, 6, 3] The shuffled list is : [4, 3, 1, 6, 5]>
Časovna zapletenost: O(n), kjer je n dolžina seznama
Kompleksnost prostora: O(n), kjer je n dolžina seznama
Naključno uredite seznam z metodo naključnega izbora
Pri tej metodi bomo naključno razvrstili seznam z uporabo metoda naključnega izbora . Indeks izberemo naključno in ta element pri tem indeksu dodamo na seznam.
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)> |
>
>
Izhod
Original List: [1, 2, 3, 4, 5, 6] Shuffled List: [1, 5, 2, 6, 3, 4]>
Časovna zapletenost: O(n), kjer je n dolžina seznama
Kompleksnost prostora: O(1)
Naključno premešaj seznam z uporabo Fisher-Yatesovega algoritma premešanja
To je eden od znanih algoritmov, ki je Algoritem Fisher-Yates Shuffle , ki se večinoma uporablja za mešanje zaporedja številk v Pythonu. Ta algoritem samo vzame višjo vrednost indeksa in jo zamenja s trenutno vrednostjo, ta postopek se ponavlja v zanki do konca seznama.
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))> |
>
>
Izhod
The original list is : [1, 4, 5, 6, 3]The shuffled list is : [3, 4, 5, 6, 1]>
Časovna zapletenost: O(n), kjer je n dolžina seznama
Kompleksnost prostora: O(n), kjer je n dolžina seznama
Naključno uredite seznam s funkcijo Itertools.Permutations().
Ta metoda ustvari vse možne permutacije prvotnega seznama z uporabo itertools.permutations() funkcijo in nato izberite naključno.
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 priorityqueue
>
Izhod
Shuffled list: (6, 5, 4, 1, 3)>
Časovna zapletenost: O(n!), kjer je n dolžina seznama zaradi generiranja vseh možnih permutacij.
Kompleksnost prostora: O(n!), ker so vse možne permutacije ustvarjene in shranjene na seznamu.
Naključni seznam z uporabo Numpyja
Uporabljamo NumPy() za premešanje elementov na seznamu. Če želite naključno razvrstiti seznam z uporabo numpy, moramo seznam pretvoriti v matriko NumPy in nato uporabiti funkcijo za zmanjšanje, ki vrne premešani seznam in natisne premešani seznam.
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()))> |
>
>
Izhod
The original list is : [1, 4, 5, 6, 3] The shuffled list is : [3, 6, 1, 5, 4]>
Časovna zapletenost: Časovna zahtevnost funkcije reduce() je odvisna od števila iteracij, ki je enako dolžini seznama. Časovna kompleksnost np.random.permutation() je O(n), kjer je n dolžina vhodne matrike. Zato je časovna kompleksnost te kode O(n^2).
Kompleksnost prostora: Prostorska kompleksnost te kode je odvisna od velikosti seznama. Seznam je shranjen v pomnilniku skupaj z nekaj dodatnimi spremenljivkami, ki jih uporablja funkcija reduce(). Zato je kompleksnost prostora O(n).