Pilihan, sampel, lan pilihan kanggo milih unsur kanthi acak saka dhaptar ing Python.

Bisnis

Pilihan fungsi (), sampel (), lan pilihan () ing modul acak saka perpustakaan standar Python bisa digunakake kanggo acak milih lan njupuk unsur saka dhaftar, tuple, senar, utawa obyek urutan liyane (sampling acak).

pilihan () entuk unsur siji, sampel () lan pilihan () entuk dhaptar sawetara unsur. sampel () punika non-recoverable extraction tanpa duplikat, pilihanipun () punika mbalekake extraction karo duplikat.

Informasi ing ngisor iki kasedhiya ing kene.

  • Pilih siji unsur kanthi acak.:random.choice()
  • Pilih sawetara unsur kanthi acak (ora ana duplikat):random.sample()
  • Pilih macem-macem unsur kanthi acak (kanthi duplikat):random.choices()
  • Ndandani wiji nomer acak

Pilih siji unsur kanthi acak.:random.choice()

Kanthi fungsi modul acak milih (), siji unsur acak dipilih saka dhaftar lan bisa njupuk.

import random

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

print(random.choice(l))
# 1

Padha ditrapake kanggo tuples lan strings. Ing kasus strings, siji karakter dipilih.

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

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

Kesalahan yen dhaptar kosong, tuple, utawa string ditemtokake minangka argumen.

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

Pilih sawetara unsur kanthi acak (ora ana duplikat):random.sample()

Kanthi sampel fungsi () saka modul acak, sampeyan bisa njaluk sawetara unsur ing acak saka dhaftar. Ora ana duplikasi unsur (ekstraksi sing ora bisa dibalekake).

Argumentasi pisanan minangka dhaptar, lan argumen kapindho yaiku jumlah unsur sing bakal dijupuk. Dhaptar kasebut bali.

import random

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

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

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

Yen argumen kapindho disetel dadi 1, dhaptar kanthi siji unsur uga bakal bali; yen wis disetel kanggo 0, dhaftar kosong. Yen argumen kapindho yaiku 1, dhaptar kanthi siji unsur bakal bali; yen 0, dhaftar kosong bali; yen bantahan pisanan luwih saka jumlah unsur ing dhaftar, ana kesalahan.

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

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

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

Yen argumentasi pisanan minangka tuple utawa senar, sing bali isih dadi dhaptar.

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

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

Yen sampeyan pengin bali menyang tuple utawa senar, gunakake tuple (), gabung ().

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

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

Elinga yen nilai ora diadili, dadi yen dhaptar asli utawa tuple ngemot unsur kanthi nilai sing padha, ana kemungkinan nilai sing padha bakal dipilih.

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

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

Yen sampeyan pengin supaya duplikat nilai, sampeyan bisa nggunakake set () Ngonversi menyang pesawat (jinis pesawat) lan extract mung unsur unik, lan banjur nggunakake sampel ().

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

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

Pilih macem-macem unsur kanthi acak (kanthi duplikat):random.choices()

pilihan fungsi modul acak () ngijini sampeyan kanggo njupuk sawetara unsur ing acak saka dhaftar, lan ora kaya sampel (), ngidini unsur duplikat sing dipilih.

pilihan () punika fungsi ditambahaké ing Python 3.6. Ora kasedhiya ing versi sadurungé.

Argumentasi k nemtokake jumlah unsur sing bakal dijupuk. Duplikasi diijini, saengga jumlah unsur sing bakal dijupuk bisa luwih gedhe tinimbang jumlah unsur ing dhaptar asli.

Amarga k minangka argumen mung tembung kunci, mula kudu nemtokake tembung kunci, kayata 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]

Nilai standar k yaiku 1; yen wis tilar, dhaftar karo 1 unsur bali.

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

Bobot argumen bisa digunakake kanggo nemtokake bobot (kemungkinan) sing saben unsur bakal dipilih, lan jinis unsur ing dhaptar bisa int utawa ngambang.

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]

Argumen cum_weights uga bisa ditemtokake minangka bobot kumulatif. Bobot_cuma ing kode sampel ing ngisor iki padha karo bobot pisanan ing ndhuwur.

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

Default kanggo bobot argumen lan cum_weights yaiku Ora Ana, tegese saben unsur dipilih kanthi kemungkinan sing padha.

Yen dawane (jumlah unsur) bobot argumen utawa cum_weights beda karo dhaptar asli, ana kesalahan.

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

Iku uga kesalahan kanggo nemtokake bobot lan cum_weights ing wektu sing padha.

# 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

Kita wis nemtokake dhaptar minangka argumen pisanan minangka conto ing kode sampel nganti saiki, nanging padha ditrapake kanggo tuples lan strings.

Ndandani wiji nomer acak

Kanthi menehi integer kasepakatan kanggo wiji fungsi modul acak (), wiji nomer acak bisa didandani lan generator nomer acak bisa initialized.

Sawise initialization karo winih padha, unsur tansah dipilih ing cara sing padha.

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

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