Как перемешать список в Python и сохранить исходные данные
💻 Информатика · 9 класс
Перемешивание меняет порядок элементов, сохраняя сами элементы и их количество. В Python для учебных задач подходит random.shuffle : функция переставляет элементы изменяемой послед

Перемешивание меняет порядок элементов, сохраняя сами элементы и их количество. В Python для учебных задач подходит random.shuffle: функция переставляет элементы изменяемой последовательности на месте. Это отличается от сортировки, при которой порядок определяется правилом, например возрастанием значений. Учебный генератор псевдослучайных чисел не предназначен для паролей и других задач безопасности.
Рабочий способ
Для списка cards = [1, 2, 3, 4] сначала импортируют модуль: import random. Затем выполняют random.shuffle(cards). После вызова в cards находятся те же четыре числа, но их порядок мог измениться. Один из возможных результатов — [3, 1, 4, 2]. Это пример, а не обещанный результат каждого запуска.
Функция не возвращает новый список: её результат — None. Поэтому запись cards = random.shuffle(cards) ошибочна для обычной цели: список уже перемешан, а переменная перезаписана значением None. Вызов лучше оставить отдельной строкой. Если важно сохранить порядок исходных данных, сначала создайте копию: mixed = cards.copy(), затем перемешайте mixed.
Если нужен новый результат
Выражение random.sample(cards, k=len(cards)) создаёт новую перемешанную выборку из всех позиций. Оно полезно и для кортежа, который нельзя изменить на месте. Но результатом будет список, а не исходный тип последовательности. Повторяющиеся значения не исчезают: в списке [1, 1, 2] обе единицы остаются отдельными позициями.
На маленькой последовательности после перемешивания может случайно сохраниться исходный порядок. Это не доказывает поломку программы. Проверка должна контролировать длину и состав, а не требовать обязательного изменения каждой позиции. Для числового примера можно сравнить sorted(original) и sorted(mixed), если элементы вообще допускают сортировку между собой.
Почему не стоит сортировать по случайному ключу
Приём «присвоить каждому элементу случайное число и отсортировать» сложнее и медленнее специализированного перемешивания; при совпадении ключей появляются дополнительные особенности порядка. Для обычного перемешивания используйте предназначенную операцию. При собственном алгоритме важно исключить смещение вероятностей: случайный обмен нескольких пар не гарантирует равномерный выбор перестановки.
Задания с ответами
1. Что хранит x после x = random.shuffle([1, 2])? Ответ: None. 2. Как не менять исходный список a? Ответ: создать b = a.copy() и вызвать random.shuffle(b) либо использовать random.sample(a, len(a)). 3. Обязательно ли [1, 2] превратится в [2, 1]? Нет: исходный порядок тоже является возможной перестановкой.
Для проверки программы достаточно нескольких разных входов: пустого списка, одного элемента, повторяющихся значений. Ожидаемый инвариант у них общий: ни один элемент не теряется и не добавляется. Конкретную случайную последовательность нельзя подставлять в ответ как единственно правильную.
Связанные материалы
Основы программирования на Python, Перестановка элементов массива.