logo

Python | Способи перемішування списку

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