Cara menggunakan random choice python

Asumsikan saya memiliki daftar berikut:

foo = ['a', 'b', 'c', 'd', 'e']

Apa cara paling sederhana untuk mengambil item secara acak dari daftar ini?

Gunakan random.choice()

import random

foo = ['a', 'b', 'c', 'd', 'e']
print(random.choice(foo))

Untuk pilihan acak yang aman secara kriptografis (mis. Untuk membuat frasa sandi dari daftar kata), gunakan random.SystemRandom class

import random

foo = ['battery', 'correct', 'horse', 'staple']
secure_random = random.SystemRandom()
print(secure_random.choice(foo))

atau secrets.choice()

import secrets
foo = ['a', 'b', 'c', 'd', 'e']
print(secrets.choice(foo))

Jika Anda ingin secara acak memilih lebih dari satu item dari daftar, atau memilih item dari set, saya sarankan menggunakan random.sample sebagai gantinya.

import random
group_of_items = {1, 2, 3, 4}               # a sequence or set will work here.
num_to_select = 2                           # set the number to select here.
list_of_random_items = random.sample(group_of_items, num_to_select)
first_random_item = list_of_random_items[0]
second_random_item = list_of_random_items[1] 

Jika Anda hanya menarik satu item dari daftar, pilihannya kurang kikuk, karena menggunakan sampel akan memiliki sintaks random.sample(some_list, 1)[0] bukannya random.choice(some_list).

Sayangnya, pilihan hanya berfungsi untuk satu output dari urutan (seperti daftar atau tupel). Meskipun random.choice(Tuple(some_set)) mungkin menjadi opsi untuk mendapatkan satu item dari set.

EDIT: Menggunakan Rahasia

Seperti yang telah ditunjukkan oleh banyak orang, jika Anda memerlukan sampel pseudorandom yang lebih aman, Anda harus menggunakan modul rahasia:

import secrets                              # imports secure module.
secure_random = secrets.SystemRandom()      # creates a secure random object.
group_of_items = {1, 2, 3, 4}               # a sequence or set will work here.
num_to_select = 2                           # set the number to select here.
list_of_random_items = secure_random.sample(group_of_items, num_to_select)
first_random_item = list_of_random_items[0]
second_random_item = list_of_random_items[1]

Jika Anda juga membutuhkan indeks, gunakan random.randrange

from random import randrange
random_index = randrange(len(foo))
print(foo[random_index])

Pada Python 3.6 Anda dapat menggunakan modul secrets , yang lebih disukai daripada modul random untuk kriptografi atau penggunaan keamanan.

Untuk mencetak elemen acak dari daftar:

import secrets
foo = ['a', 'b', 'c', 'd', 'e']
print(secrets.choice(foo))

Untuk mencetak indeks acak:

print(secrets.randbelow(len(foo)))

Untuk detailnya, lihat PEP 506 .

Saya mengusulkan skrip untuk menghapus item yang diambil secara acak dari daftar sampai kosong:

Pertahankan set dan hapus elemen yang diambil secara acak (dengan choice) hingga daftar kosong.

s=set(range(1,6))
import random

while len(s)>0:
  s.remove(random.choice(list(s)))
  print(s)

Tiga langkah memberikan tiga jawaban berbeda:

>>> 
set([1, 3, 4, 5])
set([3, 4, 5])
set([3, 4])
set([4])
set([])
>>> 
set([1, 2, 3, 5])
set([2, 3, 5])
set([2, 3])
set([2])
set([])

>>> 
set([1, 2, 3, 5])
set([1, 2, 3])
set([1, 2])
set([1])
set([])

foo = ['a', 'b', 'c', 'd', 'e']
number_of_samples = 1

Dengan python 2:

random_items = random.sample(population=foo, k=number_of_samples)

Dengan python 3:

random_items = random.choices(population=foo, k=number_of_samples)

Bagaimana cara memilih item secara acak dari daftar?

Asumsikan saya memiliki daftar berikut:

foo = ['a', 'b', 'c', 'd', 'e']  

Apa cara paling sederhana untuk mengambil item secara acak dari daftar ini?

Jika Anda ingin dekat dengan benar-benar acak , maka saya sarankan menggunakan objek SystemRandom dari modul random dengan metode choice:

>>> import random
>>> sr = random.SystemRandom()
>>> foo = list('abcde')
>>> foo
['a', 'b', 'c', 'd', 'e']

Dan sekarang:

>>> sr.choice(foo)
'd'
>>> sr.choice(foo)
'e'
>>> sr.choice(foo)
'a'
>>> sr.choice(foo)
'b'
>>> sr.choice(foo)
'a'
>>> sr.choice(foo)
'c'
>>> sr.choice(foo)
'c'

Jika Anda ingin pemilihan acak semu deterministik, gunakan fungsi choice (yang sebenarnya merupakan metode terikat pada objek Random):

>>> random.choice
<bound method Random.choice of <random.Random object at 0x800c1034>>

Tampaknya acak, tetapi sebenarnya tidak, yang dapat kita lihat jika kita pasang kembali berulang kali:

>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')

jika Anda membutuhkan indeks, gunakan saja:

import random
foo = ['a', 'b', 'c', 'd', 'e']
print int(random.random() * len(foo))
print foo[int(random.random() * len(foo))]

random.choice melakukan hal yang sama :)

numpy solusi: numpy.random.choice

Untuk pertanyaan ini, kerjanya sama dengan jawaban yang diterima (import random; random.choice()), tapi saya menambahkannya karena pemrogram mungkin sudah mengimpor numpy sudah (seperti saya) & juga ada beberapa perbedaan antara kedua metode yang mungkin menyangkut Anda kasus penggunaan aktual.

import numpy as np    
np.random.choice(foo) # randomly selects a single item

Untuk reproduktifitas, Anda dapat melakukan:

np.random.seed(123)
np.random.choice(foo) # first call will always return 'c'

Untuk sampel satu atau lebih item , dikembalikan sebagai array, berikan argumen size:

np.random.choice(foo, 5)          # sample with replacement (default)
np.random.choice(foo, 5, False)   # sample without replacement

Ini adalah kode dengan variabel yang mendefinisikan indeks acak:

import random

foo = ['a', 'b', 'c', 'd', 'e']
randomindex = random.randint(0,len(foo)-1) 
print (foo[randomindex])
## print (randomindex)

Ini adalah kode tanpa variabel:

import random

foo = ['a', 'b', 'c', 'd', 'e']
print (foo[random.randint(0,len(foo)-1)])

Dan ini adalah kode dengan cara terpendek dan paling cerdas untuk melakukannya:

import random

foo = ['a', 'b', 'c', 'd', 'e']
print(random.choice(foo))

(python 2.7)

Kita juga bisa melakukan ini menggunakan randint.

from random import randint
l= ['a','b','c']

def get_Rand_element(l):
    if l:
        return l[randint(0,len(l)-1)]
    else:
        return None

get_Rand_element(l)

Kode berikut menunjukkan jika Anda perlu membuat barang yang sama. Anda juga dapat menentukan berapa banyak sampel yang ingin Anda ekstrak.
Metode sample mengembalikan daftar baru yang mengandung unsur-unsur dari populasi sambil membiarkan populasi asli tidak berubah. Daftar yang dihasilkan dalam urutan seleksi sehingga semua sub-irisan juga akan menjadi sampel acak yang valid.

import random as random
random.seed(0)  # don't use seed function, if you want different results in each run
print(random.sample(foo,3))  # 3 is the number of sample you want to retrieve

Output:['d', 'e', 'a']

Salah satu solusi mudah jika Anda mencari sesuatu seperti ini:

from random import *
library = ["New York", "Berlin", "Rome"]

for x in range (10):
    i = randrange(0,3)
    print(library[i])

import random
list=range(100)
random_value=random.choice(list)
print(random_value)

Apa itu random python?

Fungsi random() digunakan untuk menghasilkan angka acak di Python. Tidak benar-benar acak, melainkan ini digunakan untuk menghasilkan angka pseudo-acak. Itu menyiratkan bahwa angka-angka yang dihasilkan secara acak ini dapat ditentukan.

Apa itu Randint python?

randint() Fungsi random. randint() menghasilkan angka acak dengan tipe data integer yang berada pada rentang yang telah ditentukan.