In Python war das Mischen einer Zahlenfolge schon immer ein nützliches Hilfsmittel und die Frage, die auch in vielen Bewerbungsgesprächen für Unternehmen auftauchte. Es kann immer von Vorteil sein, mehr als eine Methode zu kennen, um dies zu erreichen. Lassen Sie uns bestimmte Möglichkeiten besprechen, wie dies erreicht werden kann.
Python zufälliges Mischen einer Liste
In Python, Es gibt mehrere Möglichkeiten, eine Liste zu mischen. Hier sind verschiedene Python-Methoden zum Mischen von Listen.
- Verwendung von sorted()
- Verwenden von random.shuffle()
- Verwenden von random.sample()
- Verwendung der Zufallsauswahlmethode
- Verwendung des Fisher-Yates-Shuffle-Algorithmus
- Verwendung der Funktion itertools.permutations()
- Verwenden von NumPy
Zufälliges Mischen einer Liste mit sorted()
Eine sortierte Version der Liste kann mit erstellt werden sortiert() Funktion. Wir mischen die Elemente effektiv nach dem Zufallsprinzip, indem wir sie auf einer Kopie der neu gemischten Liste verwenden.
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)> |
>
>
Ausgabe
Original list: [1, 2, 3, 4, 5] Shuffled list: [2, 3, 4, 5, 1]>
Zeitkomplexität: O(nlogn), wobei n die Länge der Liste ist
Raumkomplexität: O(n), wobei n die Länge der Liste ist
Randomisieren Sie eine Liste mit Random.Shuffle()
Random.Shuffle() ist die am meisten empfohlene Methode zum Mischen einer Liste. Python stellt in seiner Zufallsbibliothek diese integrierte Funktion bereit, die die Liste direkt mischt. Der Nachteil dabei ist, dass die Listenreihenfolge bei diesem Vorgang verloren geht. Nützlich für Entwickler, die Zeit und Aufwand sparen möchten.
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))> |
>
>
Ausgabe
The original list is : [1, 4, 5, 6, 3] The shuffled list is : [5, 1, 3, 4, 6]>
Zeitkomplexität: O(n), wobei n die Länge der Liste ist
Raumkomplexität: O(n), wobei n die Länge der Liste ist
Randomisieren Sie eine Liste u singen Random.Sample()
Zufällige Probe(), Dies ist eine recht nützliche Funktion, besser als die oben verwendete Shuffle-Methode, da sie eine neue gemischte Liste erstellt und diese zurückgibt, anstatt die Reihenfolge der ursprünglichen Liste zu stören. Dies ist in Fällen nützlich, in denen wir die ursprüngliche Liste beibehalten müssen.
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))> |
>
Shreya Ghoshal
>
Ausgabe
The original list is : [1, 4, 5, 6, 3] The shuffled list is : [4, 3, 1, 6, 5]>
Zeitkomplexität: O(n), wobei n die Länge der Liste ist
Raumkomplexität: O(n), wobei n die Länge der Liste ist
Randomisieren Sie eine Liste mithilfe der Zufallsauswahlmethode
Bei dieser Methode werden wir eine Liste mithilfe von randomisieren Zufallsauswahlmethode . Wir wählen zufällig einen Index aus und hängen das Element an diesem Index an die Liste an.
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)> |
>
>
Ausgabe
Original List: [1, 2, 3, 4, 5, 6] Shuffled List: [1, 5, 2, 6, 3, 4]>
Zeitkomplexität: O(n) wobei n die Länge der Liste ist
Raumkomplexität: O(1)
Zufälliges Mischen einer Liste mit dem Fisher-Yates-Shuffle-Algorithmus
Dies ist einer der bekanntesten Algorithmen überhaupt Fisher-Yates-Shuffle-Algorithmus , wird hauptsächlich zum Mischen einer Zahlenfolge in Python verwendet. Dieser Algorithmus nimmt einfach den höheren Indexwert und tauscht ihn gegen den aktuellen Wert aus. Dieser Vorgang wird in einer Schleife bis zum Ende der Liste wiederholt.
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))> |
>
>
Ausgabe
The original list is : [1, 4, 5, 6, 3]The shuffled list is : [3, 4, 5, 6, 1]>
Zeitkomplexität: O(n), wobei n die Länge der Liste ist
Raumkomplexität: O(n), wobei n die Länge der Liste ist
Randomisieren Sie eine Liste mit der Funktion Itertools.Permutations()
Diese Methode generiert alle möglichen Permutationen der Originalliste unter Verwendung von itertools.permutations() Funktion aus und wählen Sie dann eine zufällige aus.
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)> |
>
>
Ausgabe
Shuffled list: (6, 5, 4, 1, 3)>
Zeitkomplexität: O(n!) wobei n aufgrund der Generierung aller möglichen Permutationen die Länge der Liste ist.
Raumkomplexität: O(n!) da alle möglichen Permutationen generiert und in einer Liste gespeichert werden.
Randomisieren Sie eine Liste mit Numpy
Wir benutzen NumPy() um die Elemente in der Liste zu mischen. Um eine Liste mit Numpy zu randomisieren, müssen wir die Liste in ein NumPy-Array konvertieren und dann die Reduzierungsfunktion anwenden. Sie gibt die gemischte Liste zurück und druckt die gemischte Liste.
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()))> |
>
>
Ausgabe
The original list is : [1, 4, 5, 6, 3] The shuffled list is : [3, 6, 1, 5, 4]>
Zeitkomplexität: Die zeitliche Komplexität der Funktion „reduce()“ hängt von der Anzahl der Iterationen ab, die der Länge der Liste entspricht. Die zeitliche Komplexität von np.random.permutation() beträgt O(n), wobei n die Länge des Eingabearrays ist. Daher beträgt die zeitliche Komplexität dieses Codes O(n^2).
Raumkomplexität: Die räumliche Komplexität dieses Codes hängt von der Größe der Liste ab. Die Liste wird zusammen mit einigen zusätzlichen Variablen, die von der Funktion Reduce() verwendet werden, im Speicher gespeichert. Daher beträgt die Raumkomplexität O(n).