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

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

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

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

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

<figure><img src="http://datagy.io/wp-content/uploads/2021/11/Quick-Answer-Python-Select-Random-Item-from-List-1024x623.png" alt="Quick Answer - Python Select Random Item from List" height="623" width="1024"><figcaption></figcaption></figure>

Оглавление

* [Что такое случайный модуль Python?](#chto-takoe-sluchainyi-modul-python)
* [Выберите случайный элемент из списка в Python](#vyberite-sluchainyi-element-iz-spiska-v-python)
* [Выбор случайных элементов из списка в Python без замены](#vybor-sluchainykh-elementov-iz-spiska-v-python-bez-zameny)
* [Выбор случайных элементов из списка в Python с заменой](#vybor-sluchainykh-elementov-iz-spiska-v-python-s-zamenoi)
* [Выбор взвешенных случайных элементов из списка в Python с заменой](#vybor-vzveshennykh-sluchainykh-elementov-iz-spiska-v-python-s-zamenoi)
* [Использование случайного начального числа для воспроизведения результатов при выборе случайных элементов](#ispolzovanie-sluchainogo-nachalnogo-chisla-dlya-vosproizvedeniya-rezultatov-pri-vybore-sluchainykh-e)
* [Заключение](#zaklyuchenie)
* [Дополнительные ресурсы](#dopolnitelnye-resursy)

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

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

```python
import random
```

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

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

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

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

```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`, и программа завершится с ошибкой, если это не обработать.

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

```python
# 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()`, чтобы выбрать несколько случайных элементов из списка:

```python
# 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`. Давайте посмотрим, как это выглядит:

```python
# 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()`, чтобы перемешать элементы в нашем списке. Мы можем сделать это, просто выбрав _все_ элементы списка.

```python
# 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](https://datagy.io/python-shuffle-list/), чтобы узнать больше способов выполнения этой задачи.

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

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

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

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

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

```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 превысит количество элементов в списке:

```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=len(items) + 2)
print(random_items)

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

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

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

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

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

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

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

```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()`, чтобы воспроизвести наши результаты:

```python
# 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, [ознакомьтесь с официальной документацией здесь](https://docs.python.org/3/library/random.html).

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

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

* Python: проверьте, содержит ли список элемент
* 7 способов выборки данных в Pandas
* Python: найти индекс (или все) подстроки в строке
