Что такое функция shuffle в Python?

Аватар пользователя Дмитрий Ибрагимов
Дмитрий Ибрагимов
18 января 2023

Функция shuffle() модуля random перемешивает элементы изменяемой последовательности (список) на месте в случайном порядке.

import random

random.shuffle(x) # где x - изменяемая последовательность (список)

Функция ничего не возвращает, а изменяет непосредственно сам объект последовательности.

import random

a = [1, 2, 3, 4, 5, 6]
b = random.shuffle(a)
print(a)
# => [5, 3, 2, 1, 6, 4]
print(b)
# => None

Функция shuffle() способна работать только с изменяемыми последовательностями, такими как списки, поэтому применить ее к неизменяемым последовательностям, таким как строка или кортеж не получится. Для перемешивания неизменяемых последовательностей можно преобразовать неизменяемую последовательность к изменяемой:

import random

a = (1, 2, 3, 4, 5, 6)
random.shuffle(a) # Так как кортеж неизменяемый объект, то вернется ошибка
TypeError: 'tuple' object does not support item assignment
# Преобразуем кортеж в список
b = list(a)
random.shuffle(b)
print(b)
# => [1, 5, 3, 4, 2, 6]

Так же можно использовать функцию random.sample().

import random

random.sample(x, k, *, counts=None)
# x - последовательность или множество
# k - количество выбираемых элементов
# counts - список элементов для повтора (для Python версии 3.9 и выше)

Количество возвращаемых элементов в выборке не должно превышать размер самой выборки, т.е. k <= len(x), в противном случае будет ошибка ValueError.

import random

a = 'QWERTYUIOP'
b = random.sample(a, 10) # В отличие от shuffle - метод возвращает новую последовательность.
print(b)
# => ['U', 'P', 'Q', 'E', 'T', 'R', 'Y', 'W', 'O', 'I']

b = random.sample(a, 11)
ValueError: Sample larger than population or is negative


a = random.sample(['A', 'B', 'C'], counts=[1, 2, 3], k=6)
print(a)
# 'A', 'B', 'C' повторяется в соответствии со значениями в counts
# => ['A', 'C', 'C', 'B', 'C', 'B'] 
1 0
Основы Python за 14 дней
  • 72 урока в онлайн-тренажере
  • 4 живых вебинара и масскодинг
  • Помощь наставника на весь период обучения

Есть что добавить? Зарегистрируйтесь

или войдите в аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Курсы по программированию в Хекслете

Backend-разработка

Разработка серверной части сайтов и веб-приложений

Frontend-разработка

Разработка внешнего интерфейса сайтов и веб-приложений и верстка

Создание сайтов

Разработка сайтов и веб-приложений на JS, Python, Java, PHP и Ruby on Rails

Тестирование

Ручное тестирование и автоматизированное тестирование на JS, Python, Java и PHP

Аналитика данных

Сбор, анализ и интерпретация данных на Python

Интенсивные курсы

Интенсивное обучение для продолжающих

DevOps

Автоматизация настройки локального окружения и серверов, развертывания и деплоя

Веб-разработка

Разработка, верстка и деплой сайтов и веб-приложений, трудоустройство для разработчиков

Математика для программистов

Обучение разделам математики, которые будут полезны при изучении программирования

JavaScript

Разработка сайтов и веб-приложений и автоматизированное тестирование на JS

Python

Веб-разработка, автоматическое тестирование и аналитика данных на Python

Java

Веб-разработка и автоматическое тестирование на Java

PHP

Веб-разработка и автоматическое тестирование на PHP

Ruby

Разработка сайтов и веб-приложений на Ruby on Rails

Go

Курсы по веб-разработке на языке Go

HTML

Современная верстка с помощью HTML и CSS

SQL

Проектирование базы данных, выполнение SQL-запросов и изучение реляционных СУБД

Git

Система управления версиями Git, регулярные выражения и основы командой строки