Все разделы
Выбрать школу

Школа. Увлечения. Большое будущее.

PROSCHOOLS · ОБРАЗОВАНИЕ РЯДОМ

Ваш город

Выберите город, чтобы находить образование и возможности рядом.

Как учитываем городКаталог и кнопки «Выбрать школу» покажут школы выбранного города.Онлайн-курсы, учебник, ГДЗ и задания к экзаменам доступны по всей России.

Популярные города

Будет выбран: Вся Россия

Учебные материалы останутся прежними.

Поиск по сайту

По всему сайтуШколы выбранного города — выше в результатах

С чего начнём?

↑ ↓ — выбрать результат · Enter — открыть · Esc — закрыть

Как перемешать список в Python и сохранить исходные данные

💻 Информатика · 9 класс

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

Электронная таблица LibreOffice Calc
Электронная таблица LibreOffice CalcOwn work (conteúdo), The Document Foundation and Canonical (window and controls) · Wikimedia Commons · CC0

Перемешивание меняет порядок элементов, сохраняя сами элементы и их количество. В 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, Перестановка элементов массива.

Источники и проверка

Python: shuffle и sample.

Источники и материалы