logo

Python | Sätt att blanda en lista

I Python har blanda en sekvens av nummer alltid varit ett användbart verktyg och frågan som har dykt upp i många företagsplaceringsintervjuer också. Att kunna mer än en metod för att uppnå detta kan alltid vara ett plus. Låt oss diskutera vissa sätt på vilka detta kan uppnås.

Python slumpmässigt blanda en lista

I Pytonorm, det finns flera sätt att blanda en lista. Här är olika Python-sätt för att blanda listor.



  • Använder sorterad()
  • Använda random.shuffle()
  • Använda random.sample()
  • Använda den slumpmässiga urvalsmetoden
  • Använder Fisher-Yates shuffle-algoritm
  • Använder itertools.permutations()-funktionen
  • Använder NumPy

Blanda en lista slumpmässigt med sorted()

En sorterad version av listan kan skapas med hjälp av sorterad() fungera. Vi blandar effektivt elementen slumpmässigt genom att använda dem på en kopia av listan som har blandats.

Python3








salman khan khan ålder
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)>

>

>

Produktion

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

Tidskomplexitet: O(nlogn), där n är längden på listan
Utrymmes komplexitet: O(n), där n är längden på listan

Randomisera en lista med Random.Shuffle()

Random.Shuffle() är den mest rekommenderade metoden för att blanda en lista. Python i sitt slumpmässiga bibliotek tillhandahåller denna inbyggda funktion som blandar listan på plats. Nackdelen med detta är att listordning går förlorad i denna process. Användbart för utvecklare som väljer att spara tid och stress.

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

>

>

Produktion

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

Tidskomplexitet: O(n), där n är längden på listan
Utrymmes komplexitet: O(n), där n är längden på listan

Randomisera en lista u sjunga Random.Sample()

Slumpmässigt urval(), Detta är en ganska användbar funktion, bättre än shuffle-metoden som används ovan på så sätt att den skapar en ny blandad lista och returnerar den istället för att störa ordningen på den ursprungliga listan. Detta är användbart i de fall vi behöver behålla den ursprungliga listan.

Python3

c# lista




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

>

>

Produktion

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

Tidskomplexitet: O(n), där n är längden på listan
Utrymmes komplexitet: O(n), där n är längden på listan

Randomisera en lista med slumpmässig urvalsmetod

I den här metoden kommer vi att randomisera en lista med hjälp av slumpmässig urvalsmetod . Vi väljer ett index slumpmässigt och lägger till det elementet i det indexet till listan.

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

>

>

Produktion

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

Tidskomplexitet: O(n) där n är längden på listan
Utrymmes komplexitet: O(1)

Blanda en lista slumpmässigt med Fisher-Yates Shuffle Algorithm

Detta är en av de berömda algoritmerna Fisher-Yates Shuffle Algoritm , huvudsakligen använt för att blanda en sekvens av nummer i Python. Denna algoritm tar bara det högre indexvärdet och byter ut det med det aktuella värdet, denna process upprepas i en slinga till slutet av listan.

Python3

hur man vet skärmstorlek




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

>

>

Produktion

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

Tidskomplexitet: O(n), där n är längden på listan
Utrymmes komplexitet: O(n), där n är längden på listan

Randomisera en lista med Itertools.Permutations()-funktionen

Denna metod genererar alla möjliga permutationer av den ursprungliga listan med hjälp av itertools.permutations() funktion och välj sedan en slumpmässig.

Python3




java system.out.println

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

>

>

Produktion

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

Tidskomplexitet: O(n!) där n är längden på listan, på grund av genereringen av alla möjliga permutationer.
Utrymmes komplexitet: O(n!) eftersom alla möjliga permutationer genereras och lagras i en lista.

Randomisera en lista använder Numpy

Vi använder NumPy() för att blanda objekten i listan. För att randomisera en lista med hjälp av numpy måste vi konvertera lista till NumPy-array och sedan använda reduceringsfunktionen och den returnerar den blandade listan och skriver ut den blandade listan.

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

>

>

Produktion

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

Tidskomplexitet: Tidskomplexiteten för reduce()-funktionen beror på antalet iterationer, vilket är lika med längden på listan. Tidskomplexiteten för np.random.permutation() är O(n) där n är längden på inmatningsmatrisen. Därför är tidskomplexiteten för denna kod O(n^2).
Utrymmes komplexitet: Utrymmeskomplexiteten för denna kod beror på storleken på listan. Listan lagras i minnet tillsammans med några ytterligare variabler som används av reduce()-funktionen. Därför är rymdkomplexiteten O(n).