У Python перетасування послідовності чисел завжди було корисною утилітою, а також питанням, яке з’являлося на багатьох співбесідах щодо працевлаштування в компанії. Знання кількох методів досягнення цього завжди може бути плюсом. Давайте обговоримо певні способи, якими цього можна досягти.
Випадкове перемішування списку Python
в Python, є кілька способів перетасувати список. Ось різні способи Python для перетасування списків.
- Використання sorted()
- Використання random.shuffle()
- Використання random.sample()
- Використання методу випадкового вибору
- Використання алгоритму перетасування Фішера-Єйтса
- Використання функції itertools.permutations().
- Використання NumPy
Випадкове перемішування списку за допомогою sorted()
Відсортовану версію списку можна створити за допомогою відсортовано() функція. Ми фактично випадково перемішуємо елементи, використовуючи їх у копії списку, який було перетасовано.
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)> |
>
>
Вихід
Original list: [1, 2, 3, 4, 5] Shuffled list: [2, 3, 4, 5, 1]>
Часова складність: O(nlogn), де n - довжина списку
Космічна складність: O(n), де n - довжина списку
Рандомізуйте список за допомогою Random.Shuffle()
Random.Shuffle() є найбільш рекомендованим методом перетасування списку. Python у своїй довільній бібліотеці надає цю вбудовану функцію, яка на місці перемішує список. Недоліком цього є те, що в цьому процесі втрачається порядок списку. Корисно для розробників, які хочуть заощадити час і суєту.
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))> |
>
>
Вихід
машинне навчання та типи
The original list is : [1, 4, 5, 6, 3] The shuffled list is : [5, 1, 3, 4, 6]>
Часова складність: O(n), де n - довжина списку
Космічна складність: O(n), де n - довжина списку
Рандомізуйте список u співати Random.Sample()
Random.Sample(), Це досить корисна функція, краща за використаний вище метод перемішування в тому аспекті, що вона створює новий перетасований список і повертає його замість того, щоб порушувати порядок вихідного списку. Це корисно у випадках, коли нам потрібно зберегти вихідний список.
Python3
перемикач програмування на java
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))> |
>
>
Вихід
The original list is : [1, 4, 5, 6, 3] The shuffled list is : [4, 3, 1, 6, 5]>
Часова складність: O(n), де n - довжина списку
Космічна складність: O(n), де n - довжина списку
Рандомізуйте список за допомогою методу випадкового вибору
У цьому методі ми рандомізуємо список за допомогою метод випадкового відбору . Ми вибираємо індекс випадковим чином і додаємо цей елемент за цим індексом до списку.
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)> |
>
>
Вихід
Original List: [1, 2, 3, 4, 5, 6] Shuffled List: [1, 5, 2, 6, 3, 4]>
Часова складність: O(n), де n - довжина списку
Космічна складність: О(1)
Випадкове перемішування списку за допомогою алгоритму перемішування Фішера-Йейтса
Це один із відомих алгоритмів Алгоритм перетасування Фішера-Йетса , в основному використовується для перемішування послідовності чисел у Python. Цей алгоритм просто бере вище значення індексу та замінює його поточним значенням, цей процес повторюється в циклі до кінця списку.
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))> |
>
>
Вихід
метод java compareto
The original list is : [1, 4, 5, 6, 3]The shuffled list is : [3, 4, 5, 6, 1]>
Часова складність: O(n), де n - довжина списку
Космічна складність: O(n), де n - довжина списку
Рандомізуйте список за допомогою функції Itertools.Permutations().
Цей метод генерує всі можливі перестановки вихідного списку за допомогою itertools.permutations() функцію, а потім виберіть випадкову.
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)> |
>
>
Вихід
Shuffled list: (6, 5, 4, 1, 3)>
Часова складність: O(n!), де n - довжина списку, завдяки генерації всіх можливих перестановок.
Космічна складність: O(n!), оскільки всі можливі перестановки генеруються та зберігаються у списку.
Рандомізуйте список за допомогою Numpy
Ми використовуємо NumPy() щоб перемішати елементи у списку. Щоб рандомізувати список за допомогою numpy, нам потрібно перетворити список на масив NumPy, а потім застосувати функцію зменшення, яка повертає перетасований список і друкує його.
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()))> |
>
>
Вихід
The original list is : [1, 4, 5, 6, 3] The shuffled list is : [3, 6, 1, 5, 4]>
Часова складність: Часова складність функції reduce() залежить від кількості ітерацій, яка дорівнює довжині списку. Часова складність np.random.permutation() становить O(n), де n — довжина вхідного масиву. Отже, часова складність цього коду становить O(n^2).
Космічна складність: Складність простору цього коду залежить від розміру списку. Список зберігається в пам’яті разом із кількома додатковими змінними, які використовуються функцією reduce(). Отже, просторова складність дорівнює O(n).