- Перемешивание списка с помощью random shuffle() в Python
- Что такое функция random shuffle() в Python?
- Синтаксис
- Параметры
- Возвращаемое значение
- Пример случайного перемешивания списка
- Python random.shuffle() для строк
- Перемешивание кортежей в Python
- Перетасовка словаря в Python
- Перетасовка многомерного массива
- Заключение
- Как перемешать элементы списка в Python
- Объяснение алгоритма на языке Python
- Код перемешивания списка
- Использование функции
- Собираем все вместе
Перемешивание списка с помощью random shuffle() в Python
Функция Python random shuffle() перемешивает строку или любую последовательность. Перетасовка списка означает, что мы случайным образом меняем порядок элементов в списке.
Что такое функция random shuffle() в Python?
Чтобы перетасовать последовательность, например список или строку в Python, используйте метод random shuffle(). Если вам нужно выполнить перетасовку в соответствии с вашими требованиями, вы можете передать пользовательский случайный метод вместо случайного аргумента, который будет указывать функции shuffle() о том, как рандомизировать элемент списка. Метод shuffle() в Python принимает последовательность(список, строку или кортеж) и реорганизует порядок элементов.
Модуль random использует начальное значение в качестве основы для генерации случайного числа. По умолчанию в качестве начального значения используется текущее системное время. Если мы изменим начальное значение, мы можем изменить вывод.
См. следующий синтаксис метода random.shuffle().
Синтаксис
random.shuffle(sequence, random)
Параметры
Метод shuffle() принимает два параметра:
- sequence — это любая последовательность, которую вы хотите перетасовать. Последовательность может быть списком, строкой или кортежем.
- Необязательный аргумент random — это функция, которая возвращает случайное число с плавающей запятой в диапазоне от 0,1 до 1,0. Если не указано, то по умолчанию Python использует функцию random.random().
Возвращаемое значение
random.shuffle() перемешивает на месте и ничего не возвращает. Например, shuffle() возвращает None. Функция shuffle() изменяет положение элементов в изменяемой последовательности.
Пример случайного перемешивания списка
import random number_list = [19, 11, 21, 28, 35, 42, 49, 56, 63, 70] print("Original list:", number_list) random.shuffle(number_list) print("List after first shuffle:", number_list) random.shuffle(number_list) print("List after second shuffle:", number_list)
Original list: [19, 11, 21, 28, 35, 42, 49, 56, 63, 70] List after first shuffle: [56, 11, 49, 70, 28, 35, 42, 21, 63, 19] List after second shuffle: [56, 49, 28, 11, 42, 63, 70, 35, 21, 19]
random.shuffle() работает на месте и возвращает None; Например, случайным образом изменяет порядок элементов в списке. Но в большинстве случаев нам нужен исходный список. Теперь, как получить первоначальный или исходный список?
Мы можем получить исходный список, используя следующие два способа. Эти методы не изменяют исходный список, но возвращают новый перемешанный список.
- Сделайте копию исходного списка в новый список перед перемешиванием (идеально и предпочтительно).
- Список в случайном порядке не подходит для получения перемешанного списка вместо изменения исходного списка.
import random numbers = [29, 18, 19, 21, 46, 47] # copy to new list new_list = numbers[:] # shuffle the new list random.shuffle(new_list) print("Original list : ", numbers) print("List after shuffle", new_list)
Original list : [29, 18, 19, 21, 46, 47] List after shuffle [47, 18, 46, 19, 29, 21]
В этом примере сначала мы импортировали случайный модуль, а затем определили список чисел. Затем мы скопировали этот список в новый список с именем new_list. А затем мы перетасовали new_list и распечатали список чисел и new_list.
Python random.shuffle() для строк
Чтобы перетасовать строку в Python, также используйте метод random.shuffle(). Если вы попытаетесь переставить символы строки с помощью случайного перемешивания(), то получите ошибку, потому что строка неизменяема, и вы не можете изменить неизменяемые объекты в Python.
Метод random.shuffle() корректирует положение элементов и изменяет исходный объект. random.shuffle() не работает со строкой, т.е. он не может принимать строковый аргумент.
import random string_el = "Millie" random.shuffle(string_el) print(string_el)
Traceback(most recent call last): File "app.py", line 4, in random.shuffle(string_el) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/random.py", line 307, in shuffle x[i], x[j] = x[j], x[i] TypeError: 'str' object does not support item assignment
В выводе мы получили сообщение об ошибке: TypeError: объект ‘str’ не поддерживает назначение элементов.
- Преобразовать строки Python в список.
- Перемешать список случайным образом.
- Преобразовать обратно перетасованный список в строку.
import random string_el = "Millie" print('The orignal string is: ', string_el) # Convert String to List char_list = list(string_el) # shuffle list random.shuffle(char_list) # Convert list to string shuffled_str = ''.join(char_list) print('The shuffled string is: ', shuffled_str)
The orignal string is: Millie The shuffled string is: lliMie
Перемешивание кортежей в Python
Чтобы перетасовать кортеж в Python, используйте метод random.shuffle(). Но если вы попытаетесь напрямую перетасовать кортеж, то получите ошибку.
import random tup =(11, 21, 19, 46, 18) random.shuffle(tup)
Мы получаем ошибку типа TypeError: объект ‘tuple’ не поддерживает присваивание элементов.
Чтобы перетасовать элементы кортежа, мы можем выполнить следующие шаги.
- Преобразование кортежа Python в список
- Перемешайте список случайным образом.
- Преобразование обратно в перетасованный список в кортеж.
import random tup =(11, 21, 19, 46, 18) lst = list(tup) random.shuffle(lst) tu = tuple(lst) print(tu)
Перетасовка словаря в Python
Перетасовка словаря в Python невозможна. Однако мы можем изменить порядок итерации ключей словаря.
Извлеките все ключи из словаря и добавьте их в список, перетасуйте этот список и получите доступ к значениям словаря, используя только что перемешанные ключи.
import random netflixDict = print("Dictionary Before Shuffling") print(netflixDict) keys = list(netflixDict.keys()) random.shuffle(keys) ShufflednetflixDict = dict() for key in keys: ShufflednetflixDict.update() print("\nDictionary after Shuffling") print(ShufflednetflixDict)
Dictionary Before Shuffling Dictionary after Shuffling
В этом примере мы определили словарь, затем использовали метод dict.keys() для получения списка ключей словаря, а затем перетасовали ключи с помощью метода random.shuffle().
Затем мы сопоставляем ключи со значениями словаря, используя цикл for и метод dict.update().
В конечном итоге мы получаем перетасованный словарь.
Перетасовка многомерного массива
Чтобы перетасовать многомерный массив в Python, используйте модуль numpy random для генерации случайных данных. В этом примере я использую Python numpy для создания двумерного массива.
Кроме того, используя метод numpy.random.shuffle(), мы можем перетасовать многомерный массив. Давайте посмотрим, как перетасовать его в Python.
import numpy print("Before Shufflling 2D array") dataArray = numpy.arange(100, 240, 10) dataArray = dataArray.reshape(7,2) print(dataArray) print("After Shufflling 2D array") newArray = numpy.random.shuffle(dataArray) print(dataArray)
Before Shufflling 2D array [[100 110] [120 130] [140 150] [160 170] [180 190] [200 210] [220 230]] After Shufflling 2D array [[120 130] [180 190] [220 230] [140 150] [100 110] [160 170] [200 210]]
В этом примере мы использовали метод np arange() для создания случайного массива, а затем преобразовали его в двумерный массив. Затем используйте метод numpy random shuffle() для перемешивания 2D-массива.
Заключение
В этом руководстве мы увидели, как использовать метод random shuffle() для перемешивания списка, а также кортежа, массива и многомерного массива.
Как перемешать элементы списка в Python
В этом посте я покажу вам, как перемешать элементы массива или списка в Python.
Из массива любого типа мы собираемся смешать или рандомизировать данные таким образом, чтобы их порядок был другим. Для этого мы создадим копию массива, пройдем по нему и поменяем местами его элементы.
Объяснение алгоритма на языке Python
Мы будем выполнять цикл for от 0 до значения длины массива минус 1. То есть, увеличивать число от 0 до длины -1.
Таким образом, мы получим индекс массива на каждом шаге. Затем мы вычислим случайный индекс, взяв случайное число в определенном диапазоне.
Когда у нас есть случайный индекс, мы помещаем элемент текущего индекса во временную переменную. Затем копируем все, что находится в случайном индексе, в текущий элемент, и, наконец, помещаем временную переменную в случайный индекс.
По сути, мы выполняем обмен переменными. Вы увидите, что все будет очень просто.
Код перемешивания списка
Итак, давайте посмотрим код для перемешивания списка в Python. Я заключил его в функцию, которая получает массив и возвращает другой массив с элементами исходного, но с произвольной расстановкой элементов.
Code language: PHP (php)def mix_list(list_original): # Создаем копию, поскольку мы не должны изменять оригинал list = list_original[:] # Цикл от 0 до длины списка -1 list_length = len(list) for i in range(list_length): # Получение случайного индекса index_aleatory = random.randint(0, list_length - 1) # Замена temp = list[i] lista[i] = list[index_aleatory] list[index_aleatory] = temp # Возвращаем список return list
Важно создать копию массива, чтобы не модифицировать исходный. Цикл for выполняется в строке 7, случайный индекс вычисляется в строке 10, а замена выполняется в строках с 12 по 14.
Использование функции
Мы можем использовать его следующим образом:
Code language: PHP (php)list = [1, 2, 3, 4, 5, 6, 7, 8, 9] mixed_list = mix_list(list) print("Исходный список: ") print(list) print("Перемешанный список: ") print(mixed_list)
Массив или список может быть получен откуда угодно и может иметь элементы любого типа.
Собираем все вместе
Полный код выглядит следующим образом:
Code language: PHP (php)import random def mix_list(list_original): # Создаем копию, поскольку мы не должны изменять оригинал list = list_original[:] # Цикл от 0 до длины списка -1 list_length = len(list) for i in range(list_length): # Получение случайного индекса index_aleatory = random.randint(0, list_length - 1) # Замена temp = list[i] lista[i] = list[index_aleatory] list[index_aleatory] = temp # Возвращаем список return list list = [1, 2, 3, 4, 5, 6, 7, 8, 9] mixed_list = mix_list(list) print("Исходный список: ") print(list) print("Перемешанный список: ") print(mixed_list)