I-shuffle ang mga elemento sa isang listahan sa Python

Negosyo

Kung gusto mong i-shuffle (random na pag-uri-uriin) ang mga elemento ng isang listahan (array) sa Python, gamitin ang random na module ng karaniwang library.

Mayroong dalawang function: shuffle(), na random na nag-uuri sa orihinal na listahan, at sample(), na nagbabalik ng bagong random na pinagsunod-sunod na listahan. sample() ay maaaring gamitin para sa mga string at tuple.

  • I-shuffle ang orihinal na listahan:random.shuffle()
  • Bumuo ng bago, na-shuffle na listahan.:random.sample()
  • I-shuffle ang mga string at tuple
  • Ayusin ang random number seed

Kung gusto mong pag-uri-uriin sa pataas o pababang pagkakasunud-sunod sa halip na random, o sa reverse order, tingnan ang sumusunod na artikulo.

I-shuffle ang orihinal na listahan:random.shuffle()

Ang function shuffle() sa random na module ay maaaring random na pag-uri-uriin ang orihinal na listahan.

import random

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

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

Bumuo ng bago, na-shuffle na listahan.:random.sample()

Ang sample ng function() sa random na module ay maaaring gamitin upang lumikha ng isang bagong listahan na random na pinagsunod-sunod, nang hindi binabago ang orihinal na listahan.

sample() ay isang function na random na pumipili at kumukuha ng elemento mula sa isang listahan. Ang unang argumento ay isang listahan, at ang pangalawang argumento ay ang bilang ng mga elementong kukunin. Tingnan ang sumusunod na artikulo para sa mga detalye.

Kung ang bilang ng mga elementong pipiliin ng sample() ay ang kabuuang bilang ng mga elemento sa listahan, makakakuha tayo ng bagong listahan na ang lahat ng mga elemento ay random na pinagsunod-sunod. Ang kabuuang bilang ng mga elemento sa listahan ay nakuha ng len().

Ang orihinal na bagay ay hindi mababago.

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]

I-shuffle ang mga string at tuple

Ang mga string at tuple ay hindi nababago, kaya kung gagamit ka ng random.shuffle() upang baguhin ang orihinal na bagay, makukuha mo ang sumusunod na error.
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

Kung gusto mong i-shuffle ang isang string o tuple, gumamit ng random.sample(), na lumilikha ng bagong object.

Kahit na ang isang string o tuple ay tinukoy bilang isang argumento, ang random.sample() ay nagbabalik ng isang listahan, kaya ito ay kinakailangan upang iproseso ito pabalik sa isang string o tuple.

Sa kaso ng isang string, ito ay magiging isang listahan ng mga character nang paisa-isa. Upang pagsama-samahin ang mga ito sa isang string muli, gamitin ang join() method.

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

Para sa mga tuple, gumamit ng tuple(), na lumilikha ng isang tuple mula sa isang listahan.

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

Ayusin ang random number seed

Sa pamamagitan ng pagbibigay ng arbitrary integer sa random module’s function seed(), ang random number seed ay maaaring maayos at ang random number generator ay maaaring masimulan.

Pagkatapos ng pagsisimula sa parehong binhi, ito ay palaging muling inaayos sa parehong paraan.

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