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

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

  • автор:

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()

Как перемешать двумерный список?

samodum

Обычно преобразуют в одномерный список (честно или при помощи абстракции), перемешивают, и восстанавливают размеры.

Набросал такой перемешиватель:

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

  • Python

Flet+python после публикации как статический сайт, не прогружается, в чем проблема?

  • 1 подписчик
  • 36 минут назад
  • 5 просмотров

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

Скачай курс
в приложении

Перейти в приложение
Открыть мобильную версию сайта

© 2013 — 2024. Stepik

Наши условия использования и конфиденциальности

Get it on Google Play

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'] 

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

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