logo

Python | Måter å blande en liste på

I Python har stokking av en tallsekvens alltid vært et nyttig verktøy, og spørsmålet som har dukket opp i mange bedriftsplasseringsintervjuer også. Å vite mer enn én metode for å oppnå dette kan alltid være et pluss. La oss diskutere visse måter dette kan oppnås på.

Python Tilfeldig bland en liste

I Python, det er flere måter å blande en liste på. Her er forskjellige Python-måter for å blande lister.



  • Bruker sortert()
  • Bruker random.shuffle()
  • Bruker random.sample()
  • Bruke tilfeldig utvalgsmetode
  • Bruke Fisher-Yates shuffle-algoritme
  • Bruker funksjonen itertools.permutations().
  • Bruker NumPy

Tilfeldig bland en liste med sortert()

En sortert versjon av listen kan produseres ved hjelp av sortert() funksjon. Vi blander effektivt elementene tilfeldig ved å bruke dem på en kopi av listen som har blitt blandet.

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

>

>

Produksjon

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

Tidskompleksitet: O(nlogn), hvor n er lengden på listen
Plass kompleksitet: O(n), hvor n er lengden på listen

Randomiser en liste med Random.Shuffle()

Random.Shuffle() er den mest anbefalte metoden for å blande en liste. Python i sitt tilfeldige bibliotek gir denne innebygde funksjonen som på stedet blander listen. Ulempen med dette er at listebestillingen går tapt i denne prosessen. Nyttig for utviklere som velger å spare tid og mas.

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

>

>

Produksjon

binær søkealgoritme
The original list is : [1, 4, 5, 6, 3] The shuffled list is : [5, 1, 3, 4, 6]>

Tidskompleksitet: O(n), hvor n er lengden på listen
Plass kompleksitet: O(n), hvor n er lengden på listen

Randomiser en liste u syng Random.Sample()

Tilfeldig utvalg(), Dette er en ganske nyttig funksjon, bedre enn shuffle-metoden som ble brukt ovenfor i aspektet at den oppretter en ny stokked liste og returnerer den i stedet for å forstyrre rekkefølgen til den opprinnelige listen. Dette er nyttig i tilfeller vi trenger å beholde den opprinnelige listen.

Python3




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

>

>

Produksjon

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

Tidskompleksitet: O(n), hvor n er lengden på listen
Plass kompleksitet: O(n), hvor n er lengden på listen

Randomiser en liste ved å bruke tilfeldig utvalgsmetode

I denne metoden vil vi randomisere en liste ved hjelp av tilfeldig utvalgsmetode . Vi velger en indeks tilfeldig og legger til det elementet i den indeksen til listen.

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

>

>

Produksjon

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

Tidskompleksitet: O(n) hvor n er lengden på listen
Plass kompleksitet: O(1)

Tilfeldig bland en liste med Fisher-Yates Shuffle Algorithm

Dette er en av de kjente algoritmene Fisher-Yates Shuffle Algoritme , hovedsakelig brukt til å blande en rekke tall i Python. Denne algoritmen tar bare den høyere indeksverdien, og bytter den med gjeldende verdi, denne prosessen gjentas i en løkke til slutten av listen.

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

>

>

Produksjon

matrise på c-språk
The original list is : [1, 4, 5, 6, 3]The shuffled list is : [3, 4, 5, 6, 1]>

Tidskompleksitet: O(n), hvor n er lengden på listen
Plass kompleksitet: O(n), hvor n er lengden på listen

Randomiser en liste ved å bruke Itertools.Permutations()-funksjonen

Denne metoden genererer alle mulige permutasjoner av den opprinnelige listen ved å bruke itertools.permutations() funksjon, og velg deretter en tilfeldig.

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

>

>

Produksjon

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

Tidskompleksitet: O(n!) hvor n er lengden på listen, på grunn av generering av alle mulige permutasjoner.
Plass kompleksitet: O(n!) da alle mulige permutasjoner genereres og lagres i en liste.

Randomiser en liste bruker Numpy

Vi bruker NumPy() for å blande elementene i listen. For å randomisere en liste ved å bruke numpy, må vi konvertere listen til NumPy-matrisen og deretter bruke reduseringsfunksjonen, og den returnerer den stokkede listen og skriver ut den stokkede listen.

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

>

>

Produksjon

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

Tidskompleksitet: Tidskompleksiteten til reduce()-funksjonen avhenger av antall iterasjoner, som er lik lengden på listen. Tidskompleksiteten til np.random.permutation() er O(n) der n er lengden på inngangsmatrisen. Derfor er tidskompleksiteten til denne koden O(n^2).
Plass kompleksitet: Plasskompleksiteten til denne koden avhenger av størrelsen på listen. Listen er lagret i minnet sammen med noen få tilleggsvariabler som brukes av reduserings()-funksjonen. Derfor er romkompleksiteten O(n).