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.

Postingan terbaru

LIHAT SEMUA