Как перемешать список python
Перейти к содержимому

Как перемешать список python

  • автор:

 

Python random.shuffle() function to shuffle list

In this lesson, you will learn how to shuffle a list in Python using the random.shuffle() function. Also, learn how to shuffle string, dictionary, or any sequence in Python.

When we say shuffle a list, it means a change in the order of list items. For example, shuffle a list of cards.

You’ll learn the following functions of a random module to randomize a list in Python.

Function Description
random.shuffle(list1) Shuffle list in-place (preferred way)
random.sample(seq, len(seq)) Shuffle list not in place to return a new shuffled list. (non-preferred way) OR
To shuffle an immutable sequence such as string or range.
np.random.shuffle(array) Shuffling multidimensional array

ways to shuffle a list in Python

Also, See:

Table of contents

The random.shuffle() function

Syntax

It means shuffle a sequence x using a random function.

Parameters:

The random.shuffle() function takes two parameters. Out of the two, random is an optional parameter.

  • x : It is a sequence you want to shuffle such as list.
  • random : The optional argument random is a function returning a random float number between 0.1 to 1.0. This function decides how to shuffle a sequence. If not specified, by default Python uses the random.random() function.
    Note: this parameter deprecated since version 3.9, will be removed in version 3.11

Return Value

It shuffles sequence in place and doesn’t return anything, i.e., It returns None. This function changes the position of items in a mutable sequence.

Shuffle a List

Use the below steps to shuffle a list in Python

    Create a list

Create a list using a list() constructor. For example, list1 = list([10, 20, ‘a’, ‘b’])

Use a random module to perform the random generations on a list

Use the random.shuffle(list1) function to shuffle a list1 in place.
the shuffle() shuffles the original list, i.e., it changes the order of items in the original list randomly and doesn’t return a new list

As shuffle() function doesn’t return anything. Use print(list1) to display the original/resultant list.

Use the random.sample() function to shuffle the list not in place to get the new shuffled list in return instead of changing the original list. OR

Make a copy of the original list before shuffling (Ideal way)

If you want to perform shuffling as per your need, you can pass a custom function in the place of the random argument, which will dictate the shuffle() function on how to randomize a list’s items.

Example: –

Note: As you can see in the output, the positions of list items are changed.

Randomly Shuffle Not in Place

As you know, the shuffle() works in place and returns None, i.e., it changes the order of items in the original list randomly. But most of the time, we need the original list or sequence.

We can keep the original list intact using the following two ways. These options don’t modify the original list but return a new shuffled list.

Option 1: Make a Copy of the Original List

Make a copy of the original list before shuffling (Ideal and preferred)

Option 2: Shuffle list not in Place using random.sample()

Use the random.sample() function to shuffle list not in place to get the new shuffled list in return instead of changing the original list

The random.sample() function returns the random list with the sample size you passed to it. For example, sample(myList, 3) will return a list of 3 random items from a list.

If we pass the sample size the same as the original list’s size, it will return us the new shuffled list.

Let’s see the example. In this example, I am shuffling the list of Employee objects.

Waring : As per the official Python documentation, for small len(x) , the total number of permutations of x can quickly grow more extensive than the period of most random number generators. This implies that most permutations of a long sequence can never be generated. For example, a sequence of length 2080 is the largest that can fit within the Mersenne Twister random number generator period. So I advise you to use the use first approach.

Shuffle Two Lists At Once With Same Order

Let’s assume if you want to Shuffle two lists and maintain the same shuffle order. For example, One list contains employee names, and the other includes a salary. Let’s see how to randomize multiple lists by maintaining their order.

Shuffling NumPy Multidimensional Array

NumPy module has a numpy.random package to generate random data. In this example, I am using Python’s Numpy module to create a 2d array. Also, Using numpy.random.shuffle() function, we can shuffle the multidimensional array.

Output:

Shuffle a List to Get the Same Result Every time

Let’s how to seed the random generator in such a way that shuffling produces the same result every time. Using the seed() and shuffle() together, we can generate the same shuffled list every time.

Do you know how PRNG works in Python?

Python’s random module is not truly random. It is pseudo-random (PRNG), i.e., deterministic. The random module uses the seed value as a base to generate a random number. By default, current system time is used as a seed value. If we change the seed value, we can change the output.

Output:

Note: We are getting the same list because we use the same seed value before calling the shuffle function. This is just a simple example. To make it work with any list, we need to find the exact seed root number for that list, which will produce the output we desire.

Shuffle a String

In this section, we will see how to shuffle String in Python. But it is not as simple as shuffling a list. You will get an error if you try to shuffle a string using the shuffle() method.

Because a string is an immutable type, and You can’t modify the immutable objects in Python. The random.shuffle() doesn’t’ work with String. I.e., It can’t accept string argument. Let’s understand this with the help of the following example.

We have a solution to this. We can shuffle a string using various approaches. Let see each one by one.

Shuffle a String by Converting it to a List

Convert String to list and Shuffle the list randomly, again convert the shuffled list into String

Approach Two: Shuffling a String, not in place

Using this approach, we can keep the original string unchanged and get the new shuffled string in return. Also, we don’t need to convert the string to a list to get the shuffled string.

The sample() function returns a sample from a sequence as per the sample size you passed to it. For example, sample(str, 3) will return a list of 3 random characters from a list.

If we pass the sample size the same as the string size, it will return us the new shuffled string of characters.

 

Shuffle Range of Integers

A range() function returns a sequence of numbers.

The range() doesn’t return the list, so when you try to run shuffle(range(10)) , you will get an error. To shuffle numbers in the range(10) , first convert the range to a list .

Shuffle a Dictionary in Python

Shuffling a dictionary is not possible in Python. However, we can rearrange the order of keys of a dictionary.

  • Fetch all keys from a dictionary as a list.
  • Shuffle that list and access dictionary values using shuffled keys.

Output:

Shuffle a Python generator

The random.shuffle() needs to know the sequence’s size to shuffle the sequence uniformly. If you try to shuffle a generator object using it, you will get a TypeError: the object of type ‘generator’ has no len() .

As the generator cannot provide us the size we need to convert it into a list to shuffle it.

Next Steps

I want to hear from you. What do you think of this article on random.shuffle() ? Or maybe I missed one of the usages of random.shuffle() . Either way, let me know by leaving a comment below.

Also, try to solve the following exercise and quiz to have a better understanding of working with random data in Python.

Did you find this page helpful? Let others know about it. Sharing helps me continue to create free Python resources.

About Vishal

Founder of PYnative.com I am a Python developer and I love to write articles to help developers. Follow me on Twitter. All the best for your future Python endeavors!

Related Tutorial Topics:

Python Exercises and Quizzes

Free coding exercises and quizzes cover Python basics, data structure, data analytics, and more.

Перемешивание списка с помощью random shuffle() в Python

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

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

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

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

См. следующий синтаксис метода random.shuffle().

Синтаксис

Параметры

Метод shuffle() принимает два параметра:

  • sequence — это любая последовательность, которую вы хотите перетасовать. Последовательность может быть списком, строкой или кортежем.
  • Необязательный аргумент random — это функция, которая возвращает случайное число с плавающей запятой в диапазоне от 0,1 до 1,0. Если не указано, то по умолчанию Python использует функцию random.random().

Возвращаемое значение

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

Пример случайного перемешивания списка

random.shuffle() работает на месте и возвращает None; Например, случайным образом изменяет порядок элементов в списке. Но в большинстве случаев нам нужен исходный список. Теперь, как получить первоначальный или исходный список?

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

  1. Сделайте копию исходного списка в новый список перед перемешиванием (идеально и предпочтительно).
  2. Список в случайном порядке не подходит для получения перемешанного списка вместо изменения исходного списка.

См. следующий код.

В этом примере сначала мы импортировали случайный модуль, а затем определили список чисел. Затем мы скопировали этот список в новый список с именем new_list. А затем мы перетасовали new_list и распечатали список чисел и new_list.

Python random.shuffle() для строк

Чтобы перетасовать строку в Python, также используйте метод random.shuffle(). Если вы попытаетесь переставить символы строки с помощью случайного перемешивания(), то получите ошибку, потому что строка неизменяема, и вы не можете изменить неизменяемые объекты в Python.

Метод random.shuffle() корректирует положение элементов и изменяет исходный объект. random.shuffle() не работает со строкой, т.е. он не может принимать строковый аргумент.

В выводе мы получили сообщение об ошибке: TypeError: объект ‘str’ не поддерживает назначение элементов.

  1. Преобразовать строки Python в список.
  2. Перемешать список случайным образом.
  3. Преобразовать обратно перетасованный список в строку.

См. следующий код.

Перемешивание кортежей в Python

Чтобы перетасовать кортеж в Python, используйте метод random.shuffle(). Но если вы попытаетесь напрямую перетасовать кортеж, то получите ошибку.

Мы получаем ошибку типа TypeError: объект ‘tuple’ не поддерживает присваивание элементов.

Чтобы перетасовать элементы кортежа, мы можем выполнить следующие шаги.

  1. Преобразование кортежа Python в список
  2. Перемешайте список случайным образом.
  3. Преобразование обратно в перетасованный список в кортеж.

См. следующий код.

Перетасовка словаря в Python

Перетасовка словаря в Python невозможна. Однако мы можем изменить порядок итерации ключей словаря.

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

См. следующий код.

В этом примере мы определили словарь, затем использовали метод dict.keys() для получения списка ключей словаря, а затем перетасовали ключи с помощью метода random.shuffle().

Затем мы сопоставляем ключи со значениями словаря, используя цикл for и метод dict.update().

В конечном итоге мы получаем перетасованный словарь.

Перетасовка многомерного массива

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

Кроме того, используя метод numpy.random.shuffle(), мы можем перетасовать многомерный массив. Давайте посмотрим, как перетасовать его в Python.

В этом примере мы использовали метод np arange() для создания случайного массива, а затем преобразовали его в двумерный массив. Затем используйте метод numpy random shuffle() для перемешивания 2D-массива.

Заключение

Пример метода Random shuffle()

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

Shuffling a list of objects

How do I shuffle a list of objects? I tried random.shuffle :

Mateen Ulhaq's user avatar

25 Answers 25

random.shuffle should work. Here’s an example, where the objects are lists:

Note that shuffle works in place, and returns None .

More generally in Python, mutable objects can be passed into functions, and when a function mutates those objects, the standard is to return None (rather than, say, the mutated object).

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *