Changanya vipengele katika orodha katika Python

Biashara

Ikiwa unataka kuchanganya (panga nasibu) vipengele vya orodha (safu) katika Python, tumia moduli ya nasibu ya maktaba ya kawaida.

Kuna chaguo mbili za kukokotoa: shuffle(), ambayo hupanga orodha asili kwa nasibu, na sample(), ambayo hurejesha orodha mpya iliyopangwa kwa nasibu. sample() inaweza kutumika kwa kamba na nakala.

  • Changanya orodha asili:random.shuffle()
  • Tengeneza orodha mpya, iliyochanganyika.:random.sample()
  • Changanya kamba na tuples
  • Rekebisha mbegu ya nambari nasibu

Ikiwa ungependa kupanga kwa mpangilio wa kupanda au kushuka badala ya nasibu, au kwa mpangilio wa kinyume, ona makala ifuatayo.

Changanya orodha asili:random.shuffle()

Chaguo za kukokotoa shuffle() katika moduli nasibu inaweza kupanga orodha asili kwa nasibu.

import random

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

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

Tengeneza orodha mpya, iliyochanganyika.:random.sample()

Sampuli ya kazi () katika moduli nasibu inaweza kutumika kuunda orodha mpya ambayo imepangwa kwa nasibu, bila kubadilisha orodha asili.

sample() ni chaguo la kukokotoa ambalo huchagua na kupata kipengee kwa nasibu kutoka kwenye orodha. Hoja ya kwanza ni orodha, na hoja ya pili ni idadi ya vipengele vinavyopaswa kurejeshwa. Tazama makala ifuatayo kwa maelezo zaidi.

Ikiwa idadi ya vipengele vya kuchaguliwa kwa sample() ni jumla ya idadi ya vipengele kwenye orodha, tunapata orodha mpya yenye vipengele vyote vilivyopangwa kwa nasibu. Idadi ya jumla ya vipengele katika orodha hupatikana kwa len ().

Kipengee asili hakitabadilishwa.

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]

Changanya kamba na tuples

Kamba na nakala hazibadiliki, kwa hivyo ikiwa unatumia random.shuffle() kubadilisha kitu asilia, utapata hitilafu ifuatayo.
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

Ikiwa unataka kuchanganya kamba au tuple, tumia random.sample(), ambayo huunda kitu kipya.

Hata wakati mfuatano au tuple inapobainishwa kama hoja, random.sample() hurejesha orodha, kwa hivyo ni muhimu kuichakata hadi kwenye mfuatano au nakala.

Katika kesi ya kamba, itakuwa orodha ya wahusika moja kwa moja. Ili kuziunganisha kuwa mfuatano mmoja tena, tumia njia ya join().

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

Kwa nakala, tumia tuple(), ambayo huunda nakala kutoka kwenye orodha.

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

Rekebisha mbegu ya nambari nasibu

Kwa kutoa nambari kamili kiholela kwa seed(), nambari nasibu ya nambari inaweza kusasishwa na jenereta ya nambari nasibu inaweza kuanzishwa.

Baada ya kuanzishwa kwa mbegu sawa, daima hupangwa upya kwa njia sawa.

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]