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. Поскольку функция работает на месте, нам не нужно повторно присваивать список самому себе, но она позволяет нам легко случайным образом сортировать элементы списка.

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

# Перемешать список с использованием 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. Функция выбирает эти элементы случайным образом.

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

random.sample(iterable, k)

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

Давайте посмотрим, как мы можем использовать функцию .sample() для случайного перемешивания списка 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
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
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()

  • Перемешаем список списков внутри

  • Распакуем список списков обратно в отдельные списки

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

# Перемешивание двух списков в одинаковом порядке
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, ознакомьтесь с официальной документацией здесь.

Last updated