Python: Выбор случайного элемента из списка

В этом уроке вы узнаете, как использовать Python для выбора случайного элемента из списка. Вы научитесь делать это, выбирая случайный элемент из списка с заменой, без замены, а также как воспроизводить ваши результаты. Вы также узнаете, как изменить вес выборов.

Освоение работы со случайными элементами — важный навык в Python. Он имеет множество широких приложений, таких как в Data Science и разработке игр. Например, если вы создаете карточную игру, вам может понадобиться выбрать карту случайным образом. Python поставляется с полезным модулем random, который мы изучим в этом руководстве, чтобы помочь вам работать со случайным выбором элементов.

К концу этого урока вы получите хорошее понимание того, как использовать несколько полезных функций из модуля random, включая sample(), choice() и choices(). Вы научитесь использовать эти функции для изменения выбора случайных элементов из списка в Python.

Быстрый ответ: Используйте random.choice()

Оглавление

Что такое случайный модуль Python?

Python имеет встроенный модуль для работы с псевдослучайными числами, который называется random. Так как он встроен в язык, мы можем легко импортировать его:

import random

Модуль предлагает несколько полезных функций для случайного выбора или выборки из списка в Python. Также он содержит генератор случайных чисел, который позволяет легко воспроизводить результаты, что дает возможность проверять результаты или устранять проблемы в коде.

Выберите случайный элемент из списка в Python

Самый простой способ выбрать один случайный элемент из списка в Python – использовать функцию random.choice(). Эта функция принимает один параметр – последовательность. В нашем случае последовательностью будет список, хотя можно использовать и кортеж.

Давайте посмотрим, как можно использовать метод для выбора случайного элемента из списка Python:

# Choosing a random element from a Python list with random.choice()
import random
items = [1, 2, 3, 4, 5, 6, 7, 8, 9]

random_item = random.choice(items)
print(random_item)

# Returns: 5

Мы видим, что функция choice() выбирает один случайный элемент из нашего списка.

Функция ожидает непустой список. Что произойдет, если передать пустой список? Функция вызовет IndexError, и программа завершится с ошибкой, если это не обработать.

Давайте посмотрим, как это выглядит:

# Raising an error when the list is empty
import random
items = []
random_item = random.choice(items)
print(random_item)

# Raises: IndexError: Cannot choose from an empty sequence

Мы видим, что функция вызывает IndexError.

В следующем разделе вы узнаете, как с помощью Python выбирать случайные элементы без замены.

Выбор случайных элементов из списка в Python без замены

В этом разделе вы узнаете, как использовать Python для выбора нескольких случайных элементов из списка без замены. Что значит выбор без замены? Выборка без замены означает, что каждый элемент можно выбрать только один раз.

Чтобы использовать Python для выборки случайных элементов без замены, можно использовать функцию random.sample(). Функция принимает два параметра: список, из которого нужно сделать выборку, и количество элементов для выборки.

Давайте посмотрим, как можно использовать метод random.sample(), чтобы выбрать несколько случайных элементов из списка:

# Choosing random elements from a Python list with random.sample()
import random
items = [1, 2, 3, 4, 5, 6, 7, 8, 9]
random_items = random.sample(items, 2)
print(random_items)

# Returns: [8, 4]

Можно увидеть, что при передаче значения 2 (для аргумента ключевого слова k) возвращаются два элемента.

Что произойдет, если мы передадим значение для k, которое превышает количество элементов в нашем списке? Python вызовет ValueError. Давайте посмотрим, как это выглядит:

# Attempting to sample more values than possible
import random
items = [1, 2, 3, 4, 5, 6, 7, 8, 9]
random_items = random.sample(items, 11)
print(random_items)

# Raises: ValueError: Sample larger than population or is negative

Мы также можем использовать функцию random.sample(), чтобы перемешать элементы в нашем списке. Мы можем сделать это, просто выбрав все элементы списка.

# Using random.sample() to randomize our list
import random
items = [1, 2, 3, 4, 5, 6, 7, 8, 9]
random_items = random.sample(items, len(items))
print(random_items)

# Returns: [6, 3, 8, 2, 4, 5, 9, 7, 1]

Ознакомьтесь с моим учебником как рандомизировать элементы списка в Python, чтобы узнать больше способов выполнения этой задачи.

В следующем разделе вы узнаете, как использовать Python для случайного выбора элементов из списка с повторением.

Выбор случайных элементов из списка в Python с заменой

Бывают случаи, когда необходимо выбрать случайные элементы из списка Python с возвратом. Это означает, что элемент может быть выбран более одного раза. Это имеет множество полезных применений, включая статистику.

Для случайного выбора элементов с возвратом можно использовать метод random.choices(). Подобно функции random.sample(), этот метод принимает список и количество элементов k. Поскольку можно выбирать элемент более одного раза, значение k может превышать количество элементов в списке.

Давайте посмотрим, как можно выбирать элементы с замещением в Python:

# Choosing random elements from a Python list with random.choices()
import random
items = [1, 2, 3, 4, 5, 6, 7, 8, 9]
random_items = random.choices(items, k=4)
print(random_items)

# Returns: [9, 1, 5, 5]

Мы видим в приведенном выше примере, что значение 5 было возвращено дважды, хотя оно существует в нашем списке только один раз.

Давайте посмотрим, что произойдет, когда число k превысит количество элементов в списке:

# Choosing random elements from a Python list with random.choices()
import random
items = [1, 2, 3, 4, 5, 6, 7, 8, 9]
random_items = random.choices(items, k=len(items) + 2)
print(random_items)

# Returns: [5, 3, 8, 2, 2, 1, 2, 7, 8, 7, 5]

Можно заметить, что при установке значения k, превышающего длину списка, возвращаемый список становится больше оригинального списка.

В следующем разделе вы узнаете, как выбирать случайные элементы с заданными весами из списка в Python.

Выбор взвешенных случайных элементов из списка в Python с заменой

Бывают случаи, когда вы хотите, чтобы некоторые элементы имели больший вес по сравнению с другими элементами. Это означает, что при выборе случайных элементов вы можете хотеть, чтобы некоторые элементы имели более высокую вероятность быть выбранными.

Мы можем изменить вес наших элементов, передав массив в параметр weights=. Прежде чем углубляться в то, как это работает, представим, что по умолчанию используется массив с равными весами. Изменяя относительные веса, мы можем указать, насколько более вероятным мы хотим сделать выбор определённого элемента.

Посмотрим, как мы можем использовать Python, чтобы дать одному элементу вероятность выбора в десять раз выше, чем другим элементам в списке:

# Choosing random items from a list with replacement and weights
import random
items = [1, 2, 3, 4]
random_items = random.choices(items, k=4, weights=[10, 1, 1, 1])
print(random_items)

# Returns: [1, 3, 1, 1]

Здесь переданы веса [10, 1, 1, 1]. Веса являются относительными, что означает, что первый элемент списка имеет в десять раз больше шансов быть выбранным, чем другие элементы.

В следующем разделе вы узнаете, как воспроизводить результаты при выборе случайных элементов.

Использование случайного начального числа для воспроизведения результатов при выборе случайных элементов

Очень полезным элементом в разработке случайных результатов является (иронично) способность воспроизводить результаты. Это может помочь другим воспроизвести ваши результаты и значительно помочь в устранении неполадок в вашей работе.

Модуль random в Python включает концепцию «seed», которая генерирует генератор случайных чисел. Это позволяет нам воспроизводить результаты.

Посмотрим, как мы можем использовать функцию random seed(), чтобы воспроизвести наши результаты:

# Reproduce random item selection in Python
import random
random.seed(1)

items = [1, 2, 3, 4, 5, 6, 7, 8, 9]

random_items = random.choices(items, k=4)
print(random_items)

# Returns: [2, 8, 7, 3]

Если мы перезапустим эту программу, мы получим те же самые значения каждый раз.

Заключение

В этом руководстве вы узнали, как использовать Python для случайного выбора элементов из списка. Вы узнали, как использовать модуль random и его функции choice(), choices(), и sample() для выбора одного или нескольких элементов с возвращением и без. Вы также узнали, как применять веса к выборке, чтобы отдавать предпочтение некоторым элементам больше, чем другим. Наконец, вы узнали, как использовать функцию seed(), чтобы можно было воспроизвести результаты.

Чтобы узнать больше о модуле random в Python, ознакомьтесь с официальной документацией здесь.

Дополнительные ресурсы

Чтобы узнать больше о подобных темах, ознакомьтесь с учебными материалами ниже:

  • Python: проверьте, содержит ли список элемент

  • 7 способов выборки данных в Pandas

  • Python: найти индекс (или все) подстроки в строке

Last updated