Перемешивание элементов массива в Python: простой способ
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Если вы хотите перемешать массив в Python, рекомендуется использовать функцию random.shuffle()
. Она характеризуется высокой эффективностью и не требует дополнительной памяти, поскольку не создаёт копию массива:
import random
array = [1, 2, 3, 4, 5]
random.shuffle(array)
print(array) # Возможный вывод: [3, 5, 1, 4, 2]
Перемешивание неизменяемых данных (сохраняя их неизменность)
Если необходимо сохранить оригинальный массив без изменений, следует использовать random.sample()
. Функция возвращает перемешанную копию, оставляя исходный массив без изменений:
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
:
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
обеспечивает возможность повторения результатов.
Условное перемешивание
Если требуется выполнить перемешивание по специальной логике, можно разработать свою функцию:
import random
def custom_shuffle(array):
# Индивидуальная логика перемешивания
random.seed(42)
return shuffled_array
array = [1, 2, 3, 4, 5]
print(custom_shuffle(array)) # Теперь вы контролируете процесс!
Визуализация
Чтобы наглядно продемонстрировать работу перемешивания, представим массив в виде колоды карт:
До перемешивания: [♠️Т, ♦️3, ♥️К, ♣️2, 🃏В]
После применения random.shuffle()
:
После перемешивания: [♣️2, 🃏В, ♠️Т, ♥️К, ♦️3]
Таким образом, random.shuffle()
случайным образом перемешивает элементы массива.
Альтернативы и особые случаи
В зависимости от характера данных и поставленной задачи, могут пригодиться другие методы перемешивания:
Перемешивание ND-массивов с использованием NumPy
Для перемешивания многомерных массивов большого размера будет уместно использовать np.random.shuffle
:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
np.random.shuffle(arr)
print(arr)
Перемешивание внутри DataFrame Pandas
Для перемешивания табличных данных в pandas можно применить метод DataFrame.sample
:
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
:
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))
Полезные материалы
- random — Генерация псевдослучайных чисел — документация Python — официальная документация по функции
random.shuffle()
. - numpy.random.shuffle — Руководство NumPy — использование функции перемешивания для многомерных массивов NumPy.
- Как случайным образом перемешать массив JavaScript? – Stack Overflow — способы перемешивания элементов массива на JavaScript.
- pandas.DataFrame.sample — документация pandas — использование функции перемешивания данных в DataFrame библиотеки pandas.
- Перемешивание Фишера–Йетса – Википедия — описание алгоритма перемешивания Фишера-Йетса.
- Учебник Python по генерации случайных чисел и данных с использованием модуля random – YouTube — учебное пособие по работе с модулем
random
в Python. - secrets — Генерация безопасных случайных чисел — документация Python — описание модуля Python для безопасной генерации случайных чисел.