logo

Python | Spôsoby, ako zamiešať zoznam

V Pythone bolo miešanie postupnosti čísel vždy užitočnou pomôckou a otázkou, ktorá sa objavila aj v mnohých pohovoroch o umiestnení spoločností. Poznať viac ako jeden spôsob, ako to dosiahnuť, môže byť vždy výhodou. Poďme diskutovať o určitých spôsoboch, ako to možno dosiahnuť.

Python Náhodné premiešanie zoznamu

In Python, existuje niekoľko spôsobov, ako zamiešať zoznam. Tu sú rôzne spôsoby Pythonu na miešanie zoznamov.



  • Použitie zoradené ()
  • Použitie random.shuffle()
  • Použitie random.sample()
  • Použitie metódy náhodného výberu
  • Použitie algoritmu Fisher-Yates shuffle
  • Použitie funkcie itertools.permutations().
  • Pomocou NumPy

Náhodné premiešanie zoznamu pomocou sort()

Zoradenú verziu zoznamu je možné vytvoriť pomocou zoradené () funkciu. Prvky efektívne náhodne zamiešame tak, že ich použijeme na kópii zoznamu, ktorý bol zamieš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)>

>

>

Výkon

Original list: [1, 2, 3, 4, 5] Shuffled list: [2, 3, 4, 5, 1]>

Časová zložitosť: O(nlogn), kde n je dĺžka zoznamu
Priestorová zložitosť: O(n), kde n je dĺžka zoznamu

Randomizácia zoznamu pomocou Random.Shuffle()

Random.Shuffle() je najviac odporúčaná metóda na zamiešanie zoznamu. Python vo svojej náhodnej knižnici poskytuje túto vstavanú funkciu, ktorá na mieste zamieša zoznam. Nevýhodou je, že v tomto procese sa stratí poradie zoznamu. Užitočné pre vývojárov, ktorí sa rozhodli ušetriť čas a zhon.

Python3


vrchný príkaz unix



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

>

>

Výkon

The original list is : [1, 4, 5, 6, 3] The shuffled list is : [5, 1, 3, 4, 6]>

Časová zložitosť: O(n), kde n je dĺžka zoznamu
Priestorová zložitosť: O(n), kde n je dĺžka zoznamu

Randomizujte zoznam u spievať Random.Sample()

Náhodná vzorka(), Toto je celkom užitočná funkcia, lepšia ako metóda náhodného výberu použitá vyššie v tom, že vytvára nový zamiešaný zoznam a vracia ho namiesto toho, aby narúšal poradie pôvodného zoznamu. Je to užitočné v prípadoch, keď požadujeme zachovať pôvodný zoznam.

Python3

národnosť peta davidsona




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

>

>

Výkon

The original list is : [1, 4, 5, 6, 3] The shuffled list is : [4, 3, 1, 6, 5]>

Časová zložitosť: O(n), kde n je dĺžka zoznamu
Priestorová zložitosť: O(n), kde n je dĺžka zoznamu

Randomizujte zoznam pomocou metódy náhodného výberu

V tejto metóde náhodne usporiadame zoznam pomocou metóda náhodného výberu . Náhodne vyberieme index a pripojíme tento prvok k tomuto indexu do zoznamu.

Python3




dhanashree verma
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)>

>

>

Výkon

Original List: [1, 2, 3, 4, 5, 6] Shuffled List: [1, 5, 2, 6, 3, 4]>

Časová zložitosť: O(n) kde n je dĺžka zoznamu
Priestorová zložitosť: O(1)

Náhodné premiešanie zoznamu pomocou algoritmu Fisher-Yates Shuffle

Toto je jeden z najznámejších algoritmov algoritmus Fisher-Yates Shuffle , ktorý sa používa hlavne na premiešanie postupnosti čísel v Pythone. Tento algoritmus jednoducho vezme vyššiu hodnotu indexu a vymení ju za aktuálnu hodnotu, tento proces sa opakuje v slučke až do konca zoznamu.

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

>

pre slučky java
>

Výkon

The original list is : [1, 4, 5, 6, 3]The shuffled list is : [3, 4, 5, 6, 1]>

Časová zložitosť: O(n), kde n je dĺžka zoznamu
Priestorová zložitosť: O(n), kde n je dĺžka zoznamu

Randomizujte zoznam pomocou funkcie Itertools.Permutations().

Táto metóda generuje všetky možné permutácie pôvodného zoznamu pomocou itertools.permutations() funkciu a potom vyberte náhodnú.

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

>

>

Výkon

Shuffled list: (6, 5, 4, 1, 3)>

Časová zložitosť: O(n!), kde n je dĺžka zoznamu, kvôli generovaniu všetkých možných permutácií.
Priestorová zložitosť: O(n!), pretože všetky možné permutácie sú generované a uložené v zozname.

Randomizujte zoznam pomocou Numpy

Používame NumPy() zamiešať položky v zozname. Ak chcete náhodne usporiadať zoznam pomocou numpy, musíme zoznam previesť na pole NumPy a potom použiť funkciu redukcie, ktorá vráti zamiešaný zoznam a vytlačí zamiešaný zoznam.

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

funkcie v c
>

>

Výkon

The original list is : [1, 4, 5, 6, 3] The shuffled list is : [3, 6, 1, 5, 4]>

Časová zložitosť: Časová zložitosť funkcie reduction() závisí od počtu opakovaní, ktorý sa rovná dĺžke zoznamu. Časová zložitosť np.random.permutation() je O(n), kde n je dĺžka vstupného poľa. Preto je časová zložitosť tohto kódu O(n^2).
Priestorová zložitosť: Priestorová zložitosť tohto kódu závisí od veľkosti zoznamu. Zoznam je uložený v pamäti spolu s niekoľkými ďalšími premennými používanými funkciou reduction(). Priestorová zložitosť je teda O(n).