ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70%Забронировать скидку

Перемешивание элементов массива в Python: простой способ

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Если вы хотите перемешать массив в Python, рекомендуется использовать функцию random.shuffle(). Она характеризуется высокой эффективностью и не требует дополнительной памяти, поскольку не создаёт копию массива:

Python
Скопировать код
import random

array = [1, 2, 3, 4, 5]
random.shuffle(array)
print(array)  # Возможный вывод: [3, 5, 1, 4, 2]
Пройдите тест и узнайте подходит ли вам сфера IT
Пройти тест

Перемешивание неизменяемых данных (сохраняя их неизменность)

Если необходимо сохранить оригинальный массив без изменений, следует использовать random.sample(). Функция возвращает перемешанную копию, оставляя исходный массив без изменений:

Python
Скопировать код
import random

array = [1, 2, 3, 4, 5]
shuffled_array = random.sample(array, len(array))
print(shuffled_array)  # Возможный вывод: [2, 4, 5, 3, 1]

Sklearn shuffle: Надёжный инструмент

Для перемешивания нескольких связанных массивов, что часто требуется при решении задач машинного обучения, можно использовать sklearn.utils.shuffle:

Python
Скопировать код
from sklearn.utils import shuffle

X = [1, 2, 3, 4, 5]
y = ['a', 'b', 'c', 'd', 'e']

X, y = shuffle(X, y, random_state=42)
print(X, y)  # Возможный вывод: [4, 3, 1, 5, 2] ['d', 'c', 'a', 'e', 'b']

Функция random_state обеспечивает возможность повторения результатов.

Условное перемешивание

Если требуется выполнить перемешивание по специальной логике, можно разработать свою функцию:

Python
Скопировать код
import random

def custom_shuffle(array):
    # Индивидуальная логика перемешивания
    random.seed(42)
    return shuffled_array

array = [1, 2, 3, 4, 5]
print(custom_shuffle(array))  # Теперь вы контролируете процесс!

Визуализация

Чтобы наглядно продемонстрировать работу перемешивания, представим массив в виде колоды карт:

Markdown
Скопировать код
До перемешивания: [♠️Т, ♦️3, ♥️К, ♣️2, 🃏В]

После применения random.shuffle():

Markdown
Скопировать код
После перемешивания: [♣️2, 🃏В, ♠️Т, ♥️К, ♦️3]

Таким образом, random.shuffle() случайным образом перемешивает элементы массива.

Альтернативы и особые случаи

В зависимости от характера данных и поставленной задачи, могут пригодиться другие методы перемешивания:

Перемешивание ND-массивов с использованием NumPy

Для перемешивания многомерных массивов большого размера будет уместно использовать np.random.shuffle:

Python
Скопировать код
import numpy as np

arr = np.array([1, 2, 3, 4, 5])
np.random.shuffle(arr)
print(arr)

Перемешивание внутри DataFrame Pandas

Для перемешивания табличных данных в pandas можно применить метод DataFrame.sample:

Python
Скопировать код
import pandas as pd

df = pd.DataFrame({'col1': [1, 2, 3, 4, 5], 'col2': ['a', 'b', 'c', 'd', 'e']})
shuffled_df = df.sample(frac=1).reset_index(drop=True)
print(shuffled_df)

Безопасное перемешивание с использованием модуля secrets

В случаях, когда немаловажны вопросы безопасности, следует использовать модуль secrets:

Python
Скопировать код
import secrets

def secure_shuffle(array):
    a = array[:]
    for i in range(len(a)):
        swap_idx = secrets.randbelow(i + 1)
        a[i], a[swap_idx] = a[swap_idx], a[i]
    return a

array = [1, 2, 3, 4, 5]
print(secure_shuffle(array))

Полезные материалы

  1. random — Генерация псевдослучайных чисел — документация Python — официальная документация по функции random.shuffle().
  2. numpy.random.shuffle — Руководство NumPy — использование функции перемешивания для многомерных массивов NumPy.
  3. Как случайным образом перемешать массив JavaScript? – Stack Overflow — способы перемешивания элементов массива на JavaScript.
  4. pandas.DataFrame.sample — документация pandas — использование функции перемешивания данных в DataFrame библиотеки pandas.
  5. Перемешивание Фишера–Йетса – Википедия — описание алгоритма перемешивания Фишера-Йетса.
  6. Учебник Python по генерации случайных чисел и данных с использованием модуля random – YouTube — учебное пособие по работе с модулем random в Python.
  7. secrets — Генерация безопасных случайных чисел — документация Python — описание модуля Python для безопасной генерации случайных чисел.