Промешај елементе на листи у Питхон-у

Бусинесс

Ако желите да измешате (насумично сортирате) елементе листе (низа) у Питхон-у, користите насумични модул стандардне библиотеке.

Постоје две функције: схуффле(), која насумично сортира оригиналну листу, и сампле(), која враћа нову насумично сортирану листу. сампле() се може користити за низове и торке.

  • Промешај оригиналну листу:random.shuffle()
  • Генеришите нову, измешану листу.:random.sample()
  • Промешај низове и тупле
  • Поправи семе насумичних бројева

Ако желите да сортирате у растућем или опадајућем редоследу уместо насумичним или обрнутим редоследом, погледајте следећи чланак.

Промешај оригиналну листу:random.shuffle()

Функција схуффле() у рандом модулу може насумично сортирати оригиналну листу.

import random

l = list(range(5))
print(l)
# [0, 1, 2, 3, 4]

random.shuffle(l)
print(l)
# [1, 0, 4, 3, 2]

Генеришите нову, измешану листу.:random.sample()

Функција сампле() у рандом модулу може се користити за креирање нове листе која је насумично сортирана, без промене оригиналне листе.

сампле() је функција која насумично бира и преузима елемент са листе. Први аргумент је листа, а други аргумент је број елемената који се преузимају. За детаље погледајте следећи чланак.

Ако је број елемената које треба изабрати помоћу сампле() укупан број елемената на листи, добијамо нову листу са свим елементима насумично сортираним. Укупан број елемената на листи се добија помоћу лен().

Оригинални објекат неће бити промењен.

l = list(range(5))
print(l)
# [0, 1, 2, 3, 4]

lr = random.sample(l, len(l))
print(lr)
# [0, 3, 1, 4, 2]

print(l)
# [0, 1, 2, 3, 4]

Промешај низове и тупле

Стрингови и торке су непроменљиви, тако да ако користите рандом.схуффле() да промените оригинални објекат, добићете следећу грешку.
TypeError

s = 'abcde'

# random.shuffle(s)
# TypeError: 'str' object does not support item assignment

t = tuple(range(5))
print(t)
# (0, 1, 2, 3, 4)

# random.shuffle(t)
# TypeError: 'tuple' object does not support item assignment

Ако желите да измешате низ или тупле, користите рандом.сампле(), који креира нови објекат.

Чак и када је стринг или тупле специфициран као аргумент, рандом.сампле() враћа листу, тако да је неопходно да га обрадите назад у стринг или тупле.

У случају стринга, то ће бити листа знакова један по један. Да бисте их поново спојили у један стринг, користите метод јоин().

sr = ''.join(random.sample(s, len(s)))
print(sr)
# bedca

За торке, користите тупле(), који креира тупле са листе.

tr = tuple(random.sample(t, len(l)))
print(tr)
# (0, 1, 2, 4, 3)

Поправи семе насумичних бројева

Давањем произвољног целог броја функцији сеед(), сеед насумичних бројева може бити фиксиран и генератор случајних бројева може бити иницијализован.

Након иницијализације са истим семеном, увек се мења на исти начин.

l = list(range(5))
random.seed(0)
random.shuffle(l)
print(l)
# [2, 1, 0, 4, 3]

l = list(range(5))
random.seed(0)
random.shuffle(l)
print(l)
# [2, 1, 0, 4, 3]