> For the complete documentation index, see [llms.txt](https://bemind.gitbook.io/neural/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bemind.gitbook.io/neural/python/python-lists/python-peremeshat-spisok-sluchainoe-raspredelenie-elementov-spiska-v-python.md).

# Python: Перемешать Список (Случайное Распределение Элементов Списка в Python)

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

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

### Содержание

* В чем разница между `.shuffle` и `.sample`?
* Перемешать список Python и повторно присвоить его самому себе
* Перемешать список Python и присвоить его новому списку
* Воспроизвести результат перемешанного списка Python
* Перемешать список списков Python
* Перемешать несколько списков с одинаковым порядком перемешивания
* Заключение

### В чем разница между `.shuffle` и `.sample`?

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

Обе функции возвращают список, который случайным образом отсортирован, но как они это делают, различается:

* `random.shuffle()` перемешивает исходный список, что означает, что перемешивание выполняется на месте
* `random.sample()` возвращает новый перемешанный список на основе исходного списка
* `random.sample()` также может использоваться для перемешивания строк и кортежей, так как он создает новый список, что позволяет работать с неизменяемыми типами данных.

Теперь давайте углубимся в то, как перемешать список в Python!

Ознакомьтесь с другими учебниками по Python на datagy, включая наше полное руководство по стилизации Pandas и всеобъемлющий обзор сводных таблиц в Pandas!

### Перемешать список Python и повторно присвоить его самому себе

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

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

```python
# Перемешать список с использованием random.shuffle()
import random

a_list = ['welcome', 'to', 'datagy', 'where', 'you', 'will', 'learn', 'Python', 'and', 'more']
random.shuffle(a_list)

print(a_list)
# Возвращает: ['more', 'will', 'Python', 'welcome', 'learn', 'you', 'where', 'to', 'datagy', 'and']
```

Что мы сделали здесь:

* Создали новый список
* Применили функцию `random.shuffle()` к нему
* Вывели результат, чтобы проверить перемешивание

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

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

### Перемешать список Python и присвоить его новому списку

Функция `random.sample()` используется для выборки определенного количества элементов из подобного последовательности объекта в Python. Функция выбирает эти элементы случайным образом.

Давайте быстро посмотрим, как выглядит функция:

```python
random.sample(iterable, k)
```

В этом случае `iterable` будет списком, который мы хотим перемешать, а `k` относится к количеству элементов, которые мы хотим выбрать. Поскольку мы хотим вернуть полный список в случайном порядке, мы передадим длину списка в параметр `k`.

Давайте посмотрим, как мы можем использовать функцию `.sample()` для случайного перемешивания списка Python:

```python
# Перемешать список с использованием random.sample()
import random

a_list = ['welcome', 'to', 'datagy', 'where', 'you', 'will', 'learn', 'Python', 'and', 'more']
shuffled = random.sample(a_list, len(a_list))

print(shuffled)
# Возвращает: ['where', 'you', 'welcome', 'to', 'more', 'Python', 'and', 'datagy', 'will', 'learn']
```

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

* Мы создали наш список и присвоили его `a_list`
* Мы создали новую переменную `shuffled`, которая использовала функцию `random.sample()`. Мы передали список и длину нашего списка в функцию. Используя функцию `len()`, мы можем сделать этот метод динамическим, так как длина списка может изменяться.

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

Хотите узнать, как красиво вывести **JSON-файл** с использованием Python? Узнайте три различных метода для выполнения этого с помощью этого подробного учебника здесь.

### Воспроизвести результат перемешанного списка Python

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

Мы будем использовать функцию `random.seed()` для генерации воспроизводимого результата.

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

```python
# Воспроизведение случайным образом перемешанного списка в Python
import random

a_list = ['welcome', 'to', 'datagy', 'where', 'you', 'will', 'learn', 'Python', 'and', 'more']

random.seed(1)

for i in range(5):
    random.shuffle(a_list)
    print(a_list)

# Возвращает:
# ['learn', 'and', 'more', 'Python', 'will', 'where', 'welcome', 'you', 'to', 'datagy']
# ['will', 'to', 'more', 'welcome', 'where', 'datagy', 'learn', 'you', 'and', 'Python']
# ['you', 'and', 'learn', 'Python', 'datagy', 'will', 'more', 'to', 'welcome', 'where']
# ['to', 'learn', 'welcome', 'and', 'datagy', 'you', 'will', 'where', 'Python', 'more']
# ['welcome', 'to', 'datagy', 'more', 'will', 'where', 'learn', 'you', 'and', 'Python']
```

Теперь может показаться, что выведенные списки не случайны. Однако, если мы запустим нашу программу снова, программа вернет те же случайным образом перемешанные списки каждый раз! Функция `random.seed()` позволяет нам генерировать базовое значение, которое определяет псевдослучайность функций, следующих за ним. Поскольку в этом случае мы присвоили ему конкретное значение **2**, мы можем воспроизвести случайность.

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

### Перемешать список списков Python

В Python вы часто встречаетесь с многомерными списками, часто называемыми списками списков. Мы можем легко сделать это с помощью цикла `for`. Проходя по каждому списку в списке списков, мы можем затем легко применить функцию `random.shuffle()` для случайного перемешивания элементов подсписка.

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

```python
# Перемешивание списка списков в Python
import random

a_list = [['apple', 'orange', 'grape'], ['banana', 'melon', 'tangerine'], ['lime', 'lemon', 'strawberry']]

for sublist in a_list:
    random.shuffle(sublist)

print(a_list)

# Возвращает: [['grape', 'orange', 'apple'], ['melon', 'banana', 'tangerine'], ['strawberry', 'lemon', 'lime']]
```

Хотя мы также могли бы сделать это с помощью генератора списка, синтаксис не присваивания генератора списка немного неудобен и не такой интуитивный. По этой причине мы выбрали использовать цикл `for` здесь, так как мы всегда должны стремиться к читаемости.

В следующем разделе вы узнаете, как перемешать несколько списков с одинаковым порядком перемешивания.

Хотите узнать, как использовать функцию Python `zip()` для итерации по двум спискам? Этот учебник научит вас точно, что делает функция `zip()` и покажет вам несколько креативных способов использования функции.

### Перемешать несколько списков с одинаковым порядком перемешивания

Предположим, у вас есть два списка: один содержит тип фрукта, а другой — количество этого типа фрукта у вас. Вы хотите перемешать списки, но хотите, чтобы ссылочная целостность оставалась верной (то есть индекс **0** обоих списков был бы перемешан к тому же индексу в перемешанном результате).

Для этого мы:

* Объединим два списка в список списков с использованием функции `zip()`
* Перемешаем список списков внутри
* Распакуем список списков обратно в отдельные списки

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

```python
# Перемешивание двух списков в одинаковом порядке
import random

fruits = ['apples', 'grapes', 'oranges', 'bananas']
quantities = [50, 40, 60, 70]

merged = list(zip(fruits, quantites))
# Это выглядит как: [('apples', 50), ('grapes', 40), ('oranges', 60), ('bananas', 70)]

random.shuffle(merged)

fruits = [item[0] for item in merged]
quantities = [item[1] for item in merged]

print(fruits)
print(quantities)

# Возвращает:
# ['bananas', 'oranges', 'apples', 'grapes']
# [70, 60, 50, 40]
```

Мы видим, что мы хорошо использовали как функцию `zip()`, так и генераторы списков Python, чтобы это сделать.

Нужно автоматизировать переименование файлов? Ознакомьтесь с этим подробным руководством по использованию `pathlib` для переименования файлов. Если вы больше визуальный ученик, полное руководство также доступно в видео формате в статье!

### Заключение

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

Чтобы узнать больше о библиотеке random, ознакомьтесь с официальной документацией [здесь](https://docs.python.org/3/library/random.html).
