Hanya sebuah catatan, ini adalah nomor pseudorandom dan mereka tidak aman secara kriptografis. Jangan gunakan ini dalam hal apa pun di mana Anda tidak ingin penyerang menebak angka Anda. Gunakan secretsmodul untuk angka acak yang lebih baik. Referensi: docs.python.org/3/library/random.html
Dalam versi Python yang lebih baru, batas atas tampaknya eksklusif (yaitu randint(0,9)tidak akan pernah mengembalikan 9). Ini tidak tercermin dalam dokumentasi online, tetapi dalam bantuan bawaan.
Yly
134
Coba ini:
from random import randrange, uniform
# randrange gives you an integral value
irand = randrange(0,10)# uniform gives you a floating-point value
frand = uniform(0,10)
Ini akan meningkatkan jawaban dan harus ditambahkan. Jawaban yang lebih mengutamakan keamanan harus selalu ditambahkan jika tersedia.
SudoKid
31
Pilih ukuran array (dalam contoh ini, saya telah memilih ukuran menjadi 20). Dan kemudian, gunakan yang berikut ini:
import numpy as np
np.random.randint(10, size=(1,20))
Anda dapat mengharapkan untuk melihat output dari bentuk berikut ( bilangan bulat acak yang berbeda akan dikembalikan setiap kali Anda menjalankannya; karenanya Anda dapat mengharapkan bilangan bulat dalam larik keluaran berbeda dari contoh yang diberikan di bawah ini ).
Ini juga membantu untuk mengetahui bagaimana Numpy dapat menghasilkan array acak dengan ukuran yang ditentukan, bukan hanya satu nomor acak. (Documents: numpy.random.randint )
jkdev
28
Coba ini random.shuffle
>>>import random
>>> nums = range(10)>>> random.shuffle(nums)>>> nums
[6,3,5,4,0,1,2,9,8,7]
Bagaimana cara %timeitkerjanya di lingkungan Anda?
Cadoiz
18
Dalam hal bilangan kontinu randintatau randrangemungkin merupakan pilihan terbaik tetapi jika Anda memiliki beberapa nilai berbeda secara berurutan (yaitu a list) Anda juga dapat menggunakan choice:
>>>import random
>>> values = list(range(10))>>> random.choice(values)5
choice juga berfungsi untuk satu item dari sampel yang tidak berkelanjutan:
Bagaimana jika kita ingin lebih banyak angka dari urutan?
Gunjan naik
Jika mereka harus tanpa penggantian: random.sample. Dengan penggantian, Anda dapat menggunakan pemahaman dengan choice: misalnya untuk daftar yang berisi 3 nilai acak dengan penggantian:[choice(values) for _ in range(3)]
MSeifert
18
Sementara banyak posting menunjukkan bagaimana untuk mendapatkan satu integer acak, pertanyaan awal bertanya bagaimana untuk menghasilkan integer acak s (jamak):
Bagaimana saya bisa menghasilkan bilangan bulat acak antara 0 dan 9 (inklusif) dengan Python?
Untuk kejelasan, di sini kami mendemonstrasikan cara mendapatkan beberapa bilangan bulat acak.
Diberikan
>>>import random
lo =0
hi =10
size =5
Kode
Banyak, Integer Acak
# A>>>[lo + int(random.random()*(hi - lo))for _ in range(size)][5,6,1,3,0]
# B>>>[random.randint(lo, hi)for _ in range(size)][9,7,0,7,3]
# C>>>[random.randrange(lo, hi)for _ in range(size)][8,3,6,8,7]
# D>>> lst = list(range(lo, hi))>>> random.shuffle(lst)>>>[lst[i]for i in range(size)][6,8,2,5,1]
# E>>>[random.choice(range(lo, hi))for _ in range(size)][2,1,6,9,5]
1 Yaitu @John Lawrence Aspden, @ST Mohammed, @SiddTheKid, @ user14372, @zangw, dkk. 2 @prashanth menyebutkan modul ini menunjukkan satu bilangan bulat. 3 Ditunjukkan oleh @Siddharth Satpathy
Ya. Terima kasih untuk tautannya. Tetapi saya bermaksud mengatakan bahwa Anda dapat meningkatkan jawaban Anda dengan memberikan perincian sebelum hanya mengutip dua baris kode; seperti untuk alasan apa seseorang lebih suka menggunakannya daripada sesuatu yang sudah ada di dalamnya. Lagi pula, Anda tidak wajib melakukannya.
Simón
9
>>>import random
>>> random.randrange(10)3>>> random.randrange(10)1
Untuk mendapatkan daftar sepuluh sampel:
>>>[random.randrange(10)for x in range(10)][9,0,4,0,5,7,4,3,6,8]
Peringatan: Generator pseudo-acak dari modul ini tidak boleh digunakan untuk tujuan keamanan. Gunakan os.urandom () atau SystemRandom jika Anda memerlukan generator nomor pseudo-acak yang aman secara kriptografis.
OpenTURNS memungkinkan untuk tidak hanya mensimulasikan bilangan bulat acak tetapi juga untuk menentukan distribusi terkait dengan UserDefined kelas yang ditentukan.
Berikut ini mensimulasikan 12 hasil distribusi.
import openturns as ot
points =[[i]for i in range(10)]
distribution = ot.UserDefined(points)# By default, with equal weights.for i in range(12):
x = distribution.getRealization()print(i,x)
Cukup tambahkan karakter seperti 'ABCD' dan 'abcd' atau '^! ~ = -> <' untuk mengubah kumpulan karakter untuk menarik, ubah rentang untuk mengubah jumlah karakter yang dihasilkan.
Jawaban:
Mencoba:
Info lebih lanjut: http://docs.python.org/library/random.html#random.randrange
sumber
secrets
modul untuk angka acak yang lebih baik. Referensi: docs.python.org/3/library/random.htmlKembalikan integer acak N sehingga a <= N <= b.
Documents: https://docs.python.org/3.1/library/random.html#random.randint
sumber
randint(0,9)
tidak akan pernah mengembalikan 9). Ini tidak tercermin dalam dokumentasi online, tetapi dalam bantuan bawaan.Coba ini:
sumber
Ini menghasilkan 10 bilangan bulat pseudorandom dalam kisaran 0 hingga 9 inklusif.
sumber
The
secrets
modul baru di Python 3.6. Ini lebih baik daripadarandom
modul untuk penggunaan kriptografi atau keamanan.Untuk mencetak bilangan bulat secara acak dalam rentang inklusif 0-9:
Untuk detailnya, lihat PEP 506 .
sumber
Pilih ukuran array (dalam contoh ini, saya telah memilih ukuran menjadi 20). Dan kemudian, gunakan yang berikut ini:
Anda dapat mengharapkan untuk melihat output dari bentuk berikut ( bilangan bulat acak yang berbeda akan dikembalikan setiap kali Anda menjalankannya; karenanya Anda dapat mengharapkan bilangan bulat dalam larik keluaran berbeda dari contoh yang diberikan di bawah ini ).
sumber
Coba ini
random.shuffle
sumber
Saya akan mencoba salah satu dari yang berikut:
1.> numpy.random.randint
2.> numpy.random.uniform
3.> acak
4.> random.randint
Kecepatan:
► np.random.randint adalah yang tercepat , diikuti oleh np.random.uniform dan random.randrange . random.randint adalah yang paling lambat .
► Baik np.random.randint dan np.random.uniform jauh lebih cepat (~ 8 - 12 kali lebih cepat) daripada random.randrange dan random.randint .
Catatan:
sumber
%timeit
kerjanya di lingkungan Anda?Dalam hal bilangan kontinu
randint
ataurandrange
mungkin merupakan pilihan terbaik tetapi jika Anda memiliki beberapa nilai berbeda secara berurutan (yaitu alist
) Anda juga dapat menggunakanchoice
:choice
juga berfungsi untuk satu item dari sampel yang tidak berkelanjutan:Jika Anda membutuhkannya "kuat secara kriptografis" ada juga
secrets.choice
di python 3.6 dan yang lebih baru:sumber
random.sample
. Dengan penggantian, Anda dapat menggunakan pemahaman denganchoice
: misalnya untuk daftar yang berisi 3 nilai acak dengan penggantian:[choice(values) for _ in range(3)]
Sementara banyak posting menunjukkan bagaimana untuk mendapatkan satu integer acak, pertanyaan awal bertanya bagaimana untuk menghasilkan integer acak s (jamak):
Untuk kejelasan, di sini kami mendemonstrasikan cara mendapatkan beberapa bilangan bulat acak.
Diberikan
Kode
Banyak, Integer Acak
Contoh Bilangan Bulat Acak
Detail
Beberapa postingan menunjukkan cara membuat banyak bilangan bulat acak. 1 Berikut adalah beberapa opsi yang menjawab pertanyaan tersirat:
random.random
mengembalikan float acak dalam kisaran[0.0, 1.0)
random.randint
mengembalikan bilangan bulat acakN
sehinggaa <= N <= b
random.randrange
alias kerandint(a, b+1)
random.shuffle
mengacak urutanrandom.choice
mengembalikan elemen acak dari urutan non-kosongrandom.choices
mengembalikank
pilihan dari suatu populasi (dengan penggantian, Python 3.6+)random.sample
mengembalikank
pilihan unik dari suatu populasi (tanpa penggantian): 2Lihat juga ceramah R. Hettinger tentang Chunking dan Aliasing menggunakan contoh-contoh dari
random
modul.Berikut ini adalah perbandingan beberapa fungsi acak di Perpustakaan Standar dan Numpy:
Anda juga dapat dengan cepat mengkonversi salah satu dari banyak distribusi di Numpy ke sampel bilangan bulat acak. 3
Contohnya
1 Yaitu @John Lawrence Aspden, @ST Mohammed, @SiddTheKid, @ user14372, @zangw, dkk. 2 @prashanth menyebutkan modul ini menunjukkan satu bilangan bulat. 3 Ditunjukkan oleh @Siddharth Satpathy
sumber
jika Anda ingin menggunakan numpy maka gunakan yang berikut ini:
sumber
Untuk mendapatkan daftar sepuluh sampel:
sumber
Menghasilkan bilangan bulat acak antara 0 dan 9.
Keluaran:
sumber
random.sample
adalah hal lain yang bisa digunakansumber
Cara terbaik adalah dengan menggunakan fungsi acak impor
atau tanpa impor pustaka:
di sini popitem menghapus dan mengembalikan nilai arbitrer dari kamus
n
.sumber
Ini lebih merupakan pendekatan matematis tetapi berhasil 100% dari waktu:
Katakanlah Anda ingin menggunakan
random.random()
fungsi untuk menghasilkan angka antaraa
danb
. Untuk mencapai ini, lakukan saja hal berikut:num = (b-a)*random.random() + a;
Tentu saja, Anda dapat menghasilkan lebih banyak angka.
sumber
Dari halaman dokumentasi untuk modul acak :
random.SystemRandom , yang diperkenalkan dengan Python 2.4, dianggap aman secara kriptografis . Ini masih tersedia dalam Python 3.7.1 yang saat ini sedang ditulis.
Alih-alih
string.digits
,range
dapat digunakan untuk beberapa jawaban lain bersama mungkin dengan pemahaman. Padu padan sesuai kebutuhan Anda.sumber
OpenTURNS memungkinkan untuk tidak hanya mensimulasikan bilangan bulat acak tetapi juga untuk menentukan distribusi terkait dengan
UserDefined
kelas yang ditentukan.Berikut ini mensimulasikan 12 hasil distribusi.
Ini mencetak:
Tanda kurung yang ada karena
x
merupakanPoint
dalam 1-dimensi. Akan lebih mudah untuk menghasilkan 12 hasil dalam satu panggilan kegetSample
:akan menghasilkan:
Rincian lebih lanjut tentang topik ini ada di sini: http://openturns.github.io/openturns/master/user_manual/_generated/openturns.UserDefined.html
sumber
Saya lebih beruntung dengan ini untuk Python 3.6
Cukup tambahkan karakter seperti 'ABCD' dan 'abcd' atau '^! ~ = -> <' untuk mengubah kumpulan karakter untuk menarik, ubah rentang untuk mengubah jumlah karakter yang dihasilkan.
sumber