In Python is het door elkaar halen van een reeks getallen altijd een handig hulpmiddel geweest en de vraag die ook in veel sollicitatiegesprekken bij bedrijven naar voren is gekomen. Het kennen van meer dan één methode om dit te bereiken kan altijd een pluspunt zijn. Laten we bepaalde manieren bespreken waarop dit kan worden bereikt.
Python willekeurige shuffle van een lijst
In Python, Er zijn verschillende manieren om een lijst in willekeurige volgorde af te spelen. Hier zijn verschillende Python-manieren voor het schudden van lijsten.
- Gesorteerd() gebruiken
- Random.shuffle() gebruiken
- Random.sample() gebruiken
- Met behulp van de willekeurige selectiemethode
- Met behulp van het Fisher-Yates shuffle-algoritme
- De functie itertools.permutations() gebruiken
- NumPy gebruiken
Willekeurige shuffle van een lijst met sort()
Een gesorteerde versie van de lijst kan worden gemaakt met behulp van de gesorteerd() functie. We schudden de elementen effectief willekeurig door ze te gebruiken op een kopie van de lijst die in willekeurige volgorde is geschud.
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)> |
>
>
Uitvoer
Original list: [1, 2, 3, 4, 5] Shuffled list: [2, 3, 4, 5, 1]>
Tijdcomplexiteit: O(nlogn), waarbij n de lengte van de lijst is
Ruimtecomplexiteit: O(n), waarbij n de lengte van de lijst is
Randomiseer een lijst met Random.Shuffle()
Willekeurig. Shuffle() is de meest aanbevolen methode om een lijst in willekeurige volgorde af te spelen. Python biedt in zijn willekeurige bibliotheek deze ingebouwde functie die de lijst ter plekke in willekeurige volgorde schudt. Het nadeel hiervan is dat de lijstvolgorde bij dit proces verloren gaat. Handig voor ontwikkelaars die ervoor kiezen tijd en drukte te besparen.
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))> |
double to string java
>
>
Uitvoer
The original list is : [1, 4, 5, 6, 3] The shuffled list is : [5, 1, 3, 4, 6]>
Tijdcomplexiteit: O(n), waarbij n de lengte van de lijst is
Ruimtecomplexiteit: O(n), waarbij n de lengte van de lijst is
Randomiseer een lijst u zing Random.Sample()
Willekeurig voorbeeld(), Dit is een behoorlijk nuttige functie, beter dan de hierboven gebruikte shuffle-methode, omdat er een nieuwe geschudde lijst wordt gemaakt en deze wordt geretourneerd in plaats van de volgorde van de oorspronkelijke lijst te verstoren. Dit is handig als we de originele lijst moeten behouden.
Python3
multiplexen
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))> |
>
>
Uitvoer
The original list is : [1, 4, 5, 6, 3] The shuffled list is : [4, 3, 1, 6, 5]>
Tijdcomplexiteit: O(n), waarbij n de lengte van de lijst is
Ruimtecomplexiteit: O(n), waarbij n de lengte van de lijst is
Randomiseer een lijst met behulp van de willekeurige selectiemethode
Bij deze methode zullen we een lijst willekeurig maken met behulp van willekeurige selectiemethode . We selecteren willekeurig een index en voegen dat element aan die index toe aan de lijst.
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)> |
>
>
Uitvoer
Original List: [1, 2, 3, 4, 5, 6] Shuffled List: [1, 5, 2, 6, 3, 4]>
Tijdcomplexiteit: O(n) waarbij n de lengte van de lijst is
Ruimtecomplexiteit: O(1)
Willekeurig een lijst in willekeurige volgorde afspelen met behulp van het Fisher-Yates Shuffle-algoritme
Dit is een van de beroemde algoritmen Fisher-Yates Shuffle-algoritme , voornamelijk gebruikt om een reeks getallen in Python in willekeurige volgorde af te spelen. Dit algoritme neemt gewoon de hogere indexwaarde en verwisselt deze met de huidige waarde. Dit proces herhaalt zich in een lus tot het einde van de lijst.
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))> |
>
>
Uitvoer
The original list is : [1, 4, 5, 6, 3]The shuffled list is : [3, 4, 5, 6, 1]>
Tijdcomplexiteit: O(n), waarbij n de lengte van de lijst is
Ruimtecomplexiteit: O(n), waarbij n de lengte van de lijst is
Randomiseer een lijst met de functie Itertools.Permutations().
Deze methode genereert alle mogelijke permutaties van de originele lijst met behulp van de itertools.permutaties() functie en selecteer vervolgens een willekeurige.
Python3
numpy lijnruimte
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)> |
>
>
Uitvoer
Shuffled list: (6, 5, 4, 1, 3)>
Tijdcomplexiteit: O(n!) waarbij n de lengte van de lijst is, vanwege het genereren van alle mogelijke permutaties.
Ruimtecomplexiteit: O(n!) omdat alle mogelijke permutaties worden gegenereerd en opgeslagen in een lijst.
Randomiseer een lijst met behulp van Numpy
Wij gebruiken NumPy() om de items in de lijst in willekeurige volgorde af te spelen. Om een lijst willekeurig te maken met behulp van numpy, moeten we de lijst naar de NumPy-array converteren en vervolgens de reduce-functie toepassen. Deze retourneert de geschudde lijst en drukt de geschudde lijst af.
Python3
hoe u de schermgrootte kunt controleren
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()))> |
>
>
Uitvoer
The original list is : [1, 4, 5, 6, 3] The shuffled list is : [3, 6, 1, 5, 4]>
Tijdcomplexiteit: De tijdscomplexiteit van de reduce()-functie hangt af van het aantal iteraties, dat gelijk is aan de lengte van de lijst. De tijdscomplexiteit van np.random.permutation() is O(n) waarbij n de lengte van de invoerarray is. Daarom is de tijdscomplexiteit van deze code O(n^2).
Ruimtecomplexiteit: De ruimtecomplexiteit van deze code hangt af van de grootte van de lijst. De lijst wordt in het geheugen opgeslagen, samen met een paar extra variabelen die worden gebruikt door de functie reduce(). Daarom is de ruimtecomplexiteit O(n).