Amestecarea elementelor dintr-o listă în Python

Afaceri

Dacă doriți să amestecați (sortați aleatoriu) elementele unei liste (array) în Python, utilizați modulul random din biblioteca standard.

Există două funcții: shuffle(), care sortează aleatoriu lista originală, și sample(), care returnează o nouă listă sortată aleatoriu. sample() poate fi utilizată pentru șiruri de caractere și tușe.

  • Amestecarea listei inițiale:random.shuffle()
  • Generați o nouă listă, amestecată.:random.sample()
  • Amestecarea șirurilor și a tuplurilor
  • Fixați sămânța de numere aleatoare

Dacă doriți să sortați în ordine crescătoare sau descrescătoare în loc de aleatorie, sau în ordine inversă, consultați următorul articol.

Amestecarea listei inițiale: random.shuffle()

Funcția shuffle() din modulul random poate sorta aleatoriu lista originală.

import random

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

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

Generați o nouă listă, amestecată.: random.sample()

Funcția sample() din modulul random poate fi utilizată pentru a crea o nouă listă care este sortată aleatoriu, fără a modifica lista originală.

sample() este o funcție care selectează și extrage la întâmplare un element dintr-o listă. Primul argument este o listă, iar al doilea argument este numărul de elemente care trebuie recuperate. Pentru detalii, consultați următorul articol.

Dacă numărul de elemente care urmează să fie selectate de sample() este egal cu numărul total de elemente din listă, se obține o nouă listă cu toate elementele sortate aleatoriu. Numărul total de elemente din listă se obține prin len().

Obiectul original nu va fi modificat.

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]

Amestecarea șirurilor și a tuplurilor

Șirurile de caractere și tușele sunt imuabile, astfel încât, dacă utilizați random.shuffle() pentru a modifica obiectul original, veți obține următoarea eroare.
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

Dacă doriți să amestecați un șir sau un tupluplu, utilizați random.sample(), care creează un nou obiect.

Chiar și atunci când un șir de caractere sau un tupluplu este specificat ca argument, random.sample() returnează o listă, astfel încât este necesar să o procesăm înapoi la un șir de caractere sau un tupluplu.

În cazul unui șir de caractere, acesta va fi o listă de caractere, unul câte unul. Pentru a le concatena din nou într-un singur șir, utilizați metoda join().

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

Pentru tuple, utilizați tuple(), care creează un tuple dintr-o listă.

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

Fixați sămânța de numere aleatoare

Prin atribuirea unui număr întreg arbitrar funcției seed() a modulului random, se poate fixa sămânța de numere aleatoare și se poate inițializa generatorul de numere aleatoare.

După inițializarea cu aceeași sămânță, aceasta este întotdeauna reordonată în același mod.

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]
Copied title and URL