Калі вы хочаце перамяшаць (выпадкова сартаваць) элементы спісу (масіў) у Python, выкарыстоўвайце выпадковы модуль стандартнай бібліятэкі.
Ёсць дзве функцыі: shuffle(), якая выпадковым чынам сартуе першапачатковы спіс, і sample(), якая вяртае новы выпадковым чынам адсартаваны спіс. sample() можна выкарыстоўваць для радкоў і картэжаў.
- Змяшайце арыгінальны спіс:
random.shuffle()
- Стварыце новы перамешаны спіс.:
random.sample()
- Перамешваць радкі і картэжы
- Выпраўце насенне выпадковых лікаў
Калі вы хочаце сартаваць у парадку ўзрастання або змяншэння, а не ў выпадковым, або ў зваротным парадку, глядзіце наступны артыкул.
- Падобныя артыкулы:Сартаванне спісу ў Python: розніца паміж адсартаваным і адсартаваным
Змяшайце арыгінальны спіс:random.shuffle()
Функцыя shuffle() у модулі random можа выпадковым чынам сартаваць зыходны спіс.
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()
Функцыя sample() у модулі random можа быць выкарыстана для стварэння новага спісу, які будзе адсартаваны ў выпадковым парадку, без змены першапачатковага спісу.
sample() – гэта функцыя, якая выпадковым чынам выбірае і здабывае элемент са спісу. Першы аргумент – гэта спіс, а другі – колькасць элементаў, якія трэба атрымаць. Больш падрабязную інфармацыю глядзіце ў наступным артыкуле.
Калі колькасць элементаў, якія будуць выбраны з дапамогай sample(), з’яўляецца агульнай колькасцю элементаў у спісе, мы атрымаем новы спіс з усімі элементамі, адсартаваныя ў выпадковым парадку. Агульная колькасць элементаў у спісе атрымліваецца з дапамогай len().
Зыходны аб’ект не будзе зменены.
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]
Перамешваць радкі і картэжы
Радкі і картэжы нязменныя, таму калі вы выкарыстоўваеце random.shuffle() для змены зыходнага аб’екта, вы атрымаеце наступную памылку.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
Калі вы хочаце змяшаць радок або картэж, выкарыстоўвайце random.sample(), які стварае новы аб’ект.
Нават калі радок або картэж зададзены ў якасці аргумента, random.sample() вяртае спіс, таму яго неабходна апрацаваць назад у радок або картэж.
У выпадку радка, гэта будзе спіс сімвалаў адзін за адным. Каб зноў аб’яднаць іх у адну радок, выкарыстоўвайце метад join().
sr = ''.join(random.sample(s, len(s)))
print(sr)
# bedca
Для картэжоў выкарыстоўвайце tuple(), які стварае картэж са спісу.
tr = tuple(random.sample(t, len(l)))
print(tr)
# (0, 1, 2, 4, 3)
Выпраўце насенне выпадковых лікаў
Даючы адвольнае цэлае лік у функцыю seed() выпадковага модуля), можна зафіксаваць выпадковы лік, а генератар выпадковых лікаў можна ініцыялізаваць.
Пасля ініцыялізацыі з адным і тым жа седам, ён заўсёды пераўпарадкаваны такім жа чынам.
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]