9.19. Python – Метод shuffle() – перемешать элементы списка случайным образом
Метод shuffle() – рандомизирует элементы списка на месте. Простыми словами, перемешивает элементы списка случайным образом.
Синтаксис
Ниже приведен синтаксис метода shuffle() в Python:
shuffle (lst)
Примечание. Эта функция недоступна напрямую, поэтому нам нужно импортировать random модуль, а затем нам нужно вызвать эту функцию, используя random статический объект.
Параметры
lst – это может быть список или кортеж.
Возвращаемое значение
Функция не возвращает никакого значения.
Пример
В следующем примере показано использование метода shuffle() в Python.
#!/usr/bin/python import random list = [20, 16, 10, 5]; random.shuffle(list) print "Перемешанный список: ", list random.shuffle(list) print "Перемешанный список: ", list
Когда приведённый выше код выполнится, он даст следующий результат:
Перемешанный список: [16, 5, 10, 20] Перемешанный список: [16, 5, 20, 10]
Оглавление
- 1. Python – Самоучитель для начинающих
- 2. Python – Обзор
- 3. Python – Установка среды
- 4. Python – Базовый синтаксис
- 4.1. Python – Аргументы командной строки
- 5. Python – Типы переменных
- 6. Python – Основные операторы
- 6.1. Python – Арифметические операторы
- 6.2. Python – Операторы сравнения
- 6.3. Python – Операторы присваивания: примеры
- 6.4. Python – Побитовые операторы
- 6.5. Python – Логические операторы
- 6.6. Python – Операторы членства
- 6.7. Python – Операторы идентификации
- 6.8. Python – Приоритет операторов
- 7. Python – Условные операторы
- 7.1. Python – Условие if
- 7.2. Python – Условные операторы if. else и elif
- 7.3. Python – Вложенные операторы if
- 8. Python – Циклы
- 8.1. Python – Цикл while
- 8.2. Python – Цикл for
- 8.3. Python – Вложенные циклы
- 8.4. Python – Оператор break
- 8.5. Python – Оператор continue
- 8.6. Python – Оператор pass
- 9. Python – Числа
- 9.1. Python – Метод abs()
- 9.2. Python – Метод ceil()
- 9.3. Python – Метод cmp()
- 9.4. Python – Метод exp()
- 9.5. Python – Метод fabs()
- 9.6. Python – Метод floor()
- 9.7. Python – Метод log()
- 9.8. Python – Метод log10()
- 9.9. Python – Метод max()
- 9.10. Python – Метод min()
- 9.11. Python – Метод modf()
- 9.12. Python – Метод pow()
- 9.13. Python – Метод round()
- 9.14. Python – Метод sqrt()
- 9.15. Python – Метод choice()
- 9.16. Python – Метод randrange()
- 9.17. Python – Метод random()
- 9.18. Python – Метод seed()
- 9.19. Python – Метод shuffle()
- 9.20. Python – Метод uniform()
- 9.21. Python – Метод acos()
- 9.22. Python – Метод asin()
- 9.23. Python – Метод atan()
- 9.24. Python – Метод atan2()
- 9.25. Python – Метод cos()
- 9.26. Python – Метод hypot()
- 9.27. Python – Метод sin()
- 9.28. Python – Метод tan()
- 9.29. Python – Метод degrees()
- 9.30. Python – Метод radians()
Как перемешать двумерный список?

Обычно преобразуют в одномерный список (честно или при помощи абстракции), перемешивают, и восстанавливают размеры.
Набросал такой перемешиватель:
import random class Shuffler: def __init__(self, lst, depth=2): self.lst = lst self.depth = depth random.shuffle(self) def __getlevel(self, index, depth): curr = self.lst curr_depth = depth while curr_depth > 0: curr_depth -= 1 curr_size = len(curr) curr = curr[index % curr_size] index //= curr_size return curr, index def __getitem__(self, index): value, index = self.__getlevel(index, self.depth) if index > 0: raise IndexError('list index out of range') return value def __setitem__(self, index, value): last_line, line_index = self.__getlevel(index, self.depth - 1) last_line[line_index] = value return value def __len__(self): acc = 1 curr = self.lst curr_depth = self.depth while curr_depth > 0: curr_depth -= 1 acc *= len(curr) if acc: curr = curr[0] return acc lst = [[i * 10 + j for j in range(10)] for i in range(10)] Shuffler(lst, 2) print(*lst, sep='\n')
[45, 50, 74, 1, 3, 29, 43, 2, 93, 68]
[41, 10, 51, 99, 85, 20, 95, 54, 59, 8]
[46, 64, 24, 12, 26, 15, 6, 76, 39, 5]
[58, 13, 44, 60, 36, 70, 63, 79, 42, 18]
[9, 69, 25, 66, 67, 65, 35, 47, 23, 87]
[78, 80, 22, 73, 97, 31, 91, 75, 82, 90]
[57, 38, 49, 11, 84, 17, 62, 7, 89, 71]
[40, 30, 86, 94, 21, 53, 14, 19, 0, 32]
[33, 37, 61, 92, 81, 88, 56, 83, 98, 34]
[96, 16, 52, 4, 27, 55, 48, 72, 77, 28]
Ответ написан более двух лет назад
Комментировать
Нравится Комментировать
random.shuffle() — перемешивает одномерный массив.
Можно просто пройтись по строкам массива (двумерного списка) и применить к каждой shuffle. Затем применить shuffle к самому массиву.
Это если в изначальном запросе подразумевается равномерное перемешивание элементов по всему массиву.
Ответ написан более двух лет назад
Комментировать
Нравится Комментировать
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- Python
Flet+python после публикации как статический сайт, не прогружается, в чем проблема?
- 1 подписчик
- 36 минут назад
- 5 просмотров
Как перемешать список python



Скачай курс
в приложении
Перейти в приложение
Открыть мобильную версию сайта
© 2013 — 2024. Stepik
Наши условия использования и конфиденциальности

Public user contributions licensed under cc-wiki license with attribution required
Как перемешать два списка?
Если ключевым является «перемешать», воспользуйтесь random.shuffle():
import random l1=[1, 2, 3] l2=['test1', 'test2', 'test3'] l3 = l1 + l2 print(f'before: ') random.shuffle(l3) print(f'after: ')
before: [1, 2, 3, 'test1', 'test2', 'test3'] after: ['test3', 2, 3, 'test2', 'test1', 1]
Отслеживать
ответ дан 20 мая 2021 в 10:17
12.5k 7 7 золотых знаков 19 19 серебряных знаков 48 48 бронзовых знаков
l1=[1,2,3] l2=['test1','test2','test3'] res = [x for y in zip(l2, l1) for x in y]
['test1', 1, 'test2', 2, 'test3', 3]
Отслеживать
ответ дан 20 мая 2021 в 9:44
26k 4 4 золотых знака 21 21 серебряный знак 36 36 бронзовых знаков
Еще вариант c chain :
from itertools import chain l1=[1,2,3] l2=['test1','test2','test3'] *res, = chain.from_iterable(zip(l2,l1)) print(res) # ['test1', 1, 'test2', 2, 'test3', 3]
from functools import reduce import operator l1=[1,2,3] l2=['test1','test2','test3'] res = reduce(operator.add, zip(l2,l1)) print(res) # ('test1', 1, 'test2', 2, 'test3', 3)
Отслеживать
ответ дан 20 мая 2021 в 10:16
3,225 1 1 золотой знак 11 11 серебряных знаков 22 22 бронзовых знака
С chain отличный вариант. А с reduce работает за квадрат. И reduce(operator.add, . ) равносилен sum(. ()) .
20 мая 2021 в 13:04
l1=[1,2,3] l2=['test1','test2','test3'] res = list(sum(zip(l2,l1),())) print(res) # ['test1', 1, 'test2', 2, 'test3', 3]
sum умеет «выпрямлять» коллекции, только нужно начальное значение подходящее указать, () — это пустой кортеж и zip тоже выдаёт кортежи.
Если порядок элементов в объединении списков не важен, то можно списки просто сложить:
print(l1 + l2) # [1, 2, 3, 'test1', 'test2', 'test3']