Zgjedhja, mostra dhe zgjedhjet për të zgjedhur rastësisht elementë nga një listë në Python.

biznes

Funksionet Choice(), mostra() dhe Choices() në modulin e rastësishëm të bibliotekës standarde Python mund të përdoren për të zgjedhur dhe marrë në mënyrë të rastësishme elemente nga një listë, tuple, varg ose objekte të tjera sekuence (kampionimi i rastësishëm).

Choice() merr një element të vetëm, mostra () dhe Choices() marrin një listë me elementë të shumtë. mostra() është ekstraktim i parikuperueshëm pa dublikatë, Choices() është nxjerrje e rikuperueshme me dublikatë.

Informacioni i mëposhtëm jepet këtu.

  • Zgjidhni një element në mënyrë të rastësishme.:random.choice()
  • Zgjidh rastësisht shumë elementë (pa dublikatë):random.sample()
  • Zgjidh rastësisht elementë të shumtë (me dublikatë):random.choices()
  • Rregulloni farën e numrave të rastësishëm

Zgjidhni një element në mënyrë të rastësishme.:random.choice()

Me funksionin e modulit të rastësishëm select(), një element zgjidhet rastësisht nga lista dhe mund të merret.

import random

l = [0, 1, 2, 3, 4]

print(random.choice(l))
# 1

E njëjta gjë vlen edhe për tuplet dhe vargjet. Në rastin e vargjeve, zgjidhet një karakter i vetëm.

print(random.choice(('xxx', 'yyy', 'zzz')))
# yyy

print(random.choice('abcde'))
# b

Gabim nëse një listë bosh, tuple ose varg specifikohet si argument.

# print(random.choice([]))
# IndexError: Cannot choose from an empty sequence

Zgjidh rastësisht shumë elementë (pa dublikatë):random.sample()

Me modelin e funksionit() të modulit të rastësishëm, mund të merrni shumë elementë në mënyrë të rastësishme nga një listë. Nuk ka dyfishim të elementeve (nxjerrja e pakthyeshme).

Argumenti i parë është një listë, dhe argumenti i dytë është numri i elementeve që duhet të merren. Lista është kthyer.

import random

l = [0, 1, 2, 3, 4]

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

print(type(random.sample(l, 3)))
# <class 'list'>

Nëse argumenti i dytë vendoset në 1, kthehet gjithashtu një listë me një element; nëse është vendosur në 0, lista është bosh. Nëse argumenti i dytë është 1, kthehet një listë me një element; nëse është 0, kthehet një listë boshe; nëse argumenti i parë është më shumë se numri i elementeve në listë, ndodh një gabim.

print(random.sample(l, 1))
# [3]

print(random.sample(l, 0))
# []

# print(random.sample(l, 10))
# ValueError: Sample larger than population or is negative

Nëse argumenti i parë është një tuple ose një varg, ajo që kthehet është ende një listë.

print(random.sample(('xxx', 'yyy', 'zzz'), 2))
# ['xxx', 'yyy']

print(random.sample('abcde', 2))
# ['b', 'e']

Nëse dëshironi të ktheheni në një tuple ose varg, përdorni tuple(),join().

print(tuple(random.sample(('xxx', 'yyy', 'zzz'), 2)))
# ('xxx', 'yyy')

print(''.join(random.sample('abcde', 2)))
# dc

Vini re se vlera nuk vlerësohet, kështu që nëse lista ose tupleja origjinale përmban elementë me të njëjtën vlerë, ekziston mundësia që të zgjidhet e njëjta vlerë.

l_dup = [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3]

print(random.sample(l_dup, 3))
# [3, 1, 1]

Nëse dëshironi të shmangni vlerat e dyfishta, mund të përdorni set() për ta kthyer atë në një grup (lloj grupi) dhe për të nxjerrë vetëm elementët unikë dhe më pas përdorni mostrën ().

print(set(l_dup))
# {0, 1, 2, 3}

print(random.sample(set(l_dup), 3))
# [1, 3, 2]

Zgjidh rastësisht elementë të shumtë (me dublikatë):random.choices()

Funksioni i zgjedhjeve të modulit të rastësishëm () ju lejon të merrni elemente të shumëfishta në mënyrë të rastësishme nga një listë, dhe ndryshe nga mostra (), lejon zgjedhjen e elementeve të dyfishta.

Choices() është një funksion i shtuar në Python 3.6. Nuk është i disponueshëm në versionet e mëparshme.

Argumenti k specifikon numrin e elementeve që do të merren. Dyfishimi lejohet, kështu që numri i elementeve që do të merren mund të jetë më i madh se numri i elementeve në listën origjinale.

Meqenëse k është një argument vetëm me fjalë kyçe, është e nevojshme të specifikoni një fjalë kyçe, si p.sh. k=3.

import random

l = [0, 1, 2, 3, 4]

print(random.choices(l, k=3))
# [2, 1, 0]

print(random.choices(l, k=10))
# [3, 4, 1, 4, 4, 2, 0, 4, 2, 0]

Vlera e paracaktuar e k është 1; nëse hiqet, kthehet një listë me 1 element.

print(random.choices(l))
# [1]

Peshat e argumentit mund të përdoren për të specifikuar peshën (probabilitetin) që secili element do të zgjidhet, dhe lloji i elementeve në listë mund të jetë int ose float.

print(random.choices(l, k=3, weights=[1, 1, 1, 10, 1]))
# [0, 2, 3]

print(random.choices(l, k=3, weights=[1, 1, 0, 0, 0]))
# [0, 1, 1]

Argumenti cum_weights mund të specifikohet gjithashtu si një peshë kumulative. cum_weights në kodin e mostrës së mëposhtme është ekuivalente me peshat e para të mësipërme.

print(random.choices(l, k=3, cum_weights=[1, 2, 3, 13, 14]))
# [3, 2, 3]

Parazgjedhja për të dy argumentet peshë dhe cum_weights është None, që do të thotë se çdo element zgjidhet me të njëjtën probabilitet.

Nëse gjatësia (numri i elementeve) të peshave të argumentit ose cum_weights është e ndryshme nga lista origjinale, ndodh një gabim.

# print(random.choices(l, k=3, weights=[1, 1, 1, 10, 1, 1, 1]))
# ValueError: The number of weights does not match the population_

Është gjithashtu një gabim të specifikosh peshat dhe cum_weights në të njëjtën kohë.

# print(random.choices(l, k=3, weights=[1, 1, 1, 10, 1], cum_weights=[1, 2, 3, 13, 14]))
# TypeError: Cannot specify both weights and cumulative weights

Ne kemi specifikuar një listë si argumentin e parë si shembull në kodin e mostrës deri më tani, por e njëjta gjë vlen edhe për tuples dhe vargjet.

Rregulloni farën e numrave të rastësishëm

Duke i dhënë një numër të plotë arbitrar funksionit seed() të modulit të rastësishëm, fara e numrave të rastësishëm mund të fiksohet dhe gjeneratori i numrave të rastësishëm mund të inicializohet.

Pas inicializimit me të njëjtën farë, elementet zgjidhen gjithmonë në të njëjtën mënyrë.

random.seed(0)
print(random.choice(l))
# 3

random.seed(0)
print(random.choice(l))
# 3
Copied title and URL