Câu trả lời:
Thử:
from random import randrange
print(randrange(10))
Thông tin thêm: http://docs.python.org/l Library / brandom.html # brandom.randrange
secrets
mô-đun cho các số ngẫu nhiên tốt hơn. Tham khảo: docs.python.org/3/library/random.html
import random
print(random.randint(0,9))
random.randint(a, b)
Trả về một số nguyên N ngẫu nhiên sao cho a <= N <= b.
Tài liệu: https://docs.python.org/3.1/l Library / brandom.html # brandom.randint
randint(0,9)
sẽ không bao giờ trả về 9). Điều này không được phản ánh trong tài liệu trực tuyến, nhưng nó có trong trợ giúp tích hợp.
Thử cái này:
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)
from random import randint
x = [randint(0, 9) for p in range(0, 10)]
Điều này tạo ra 10 số nguyên giả trong phạm vi từ 0 đến 9.
Các secrets
mô-đun là mới trong Python 3.6. Điều này tốt hơn random
mô-đun cho việc sử dụng mật mã hoặc bảo mật.
Để in ngẫu nhiên một số nguyên trong phạm vi bao gồm 0-9:
from secrets import randbelow
print(randbelow(10))
Để biết chi tiết, xem PEP 506 .
Chọn kích thước của mảng (trong ví dụ này, tôi đã chọn kích thước là 20). Và sau đó, sử dụng như sau:
import numpy as np
np.random.randint(10, size=(1, 20))
Bạn có thể thấy một đầu ra có dạng sau ( các số nguyên ngẫu nhiên khác nhau sẽ được trả về mỗi lần bạn chạy nó; do đó bạn có thể mong đợi các số nguyên trong mảng đầu ra khác với ví dụ được đưa ra dưới đây ).
array([[1, 6, 1, 2, 8, 6, 3, 3, 2, 5, 6, 5, 0, 9, 5, 6, 4, 5, 9, 3]])
Hãy thử điều này thông qua random.shuffle
>>> import random
>>> nums = range(10)
>>> random.shuffle(nums)
>>> nums
[6, 3, 5, 4, 0, 1, 2, 9, 8, 7]
Tôi sẽ thử một trong những điều sau đây:
import numpy as np
X1 = np.random.randint(low=0, high=10, size=(15,))
print (X1)
>>> array([3, 0, 9, 0, 5, 7, 6, 9, 6, 7, 9, 6, 6, 9, 8])
import numpy as np
X2 = np.random.uniform(low=0, high=10, size=(15,)).astype(int)
print (X2)
>>> array([8, 3, 6, 9, 1, 0, 3, 6, 3, 3, 1, 2, 4, 0, 4])
3.> ngẫu nhiên.
from random import randrange
X3 = [randrange(10) for i in range(15)]
print (X3)
>>> [2, 1, 4, 1, 2, 8, 8, 6, 4, 1, 0, 5, 8, 3, 5]
4.> ngẫu nhiên.
from random import randint
X4 = [randint(0, 9) for i in range(0, 15)]
print (X4)
>>> [6, 2, 6, 9, 5, 3, 2, 3, 3, 4, 4, 7, 4, 9, 6]
Tốc độ:
► np.random.randint là nhanh nhất , tiếp theo là np.random.uniform và Random.randrange . Random.randint là chậm nhất .
► Cả np.random.randint và np.random.uniform đều nhanh hơn nhiều ( nhanh hơn 8 - 12 lần) so với Random.randrange và Random.randint .
%timeit np.random.randint(low=0, high=10, size=(15,))
>> 1.64 µs ± 7.83 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%timeit np.random.uniform(low=0, high=10, size=(15,)).astype(int)
>> 2.15 µs ± 38.6 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
%timeit [randrange(10) for i in range(15)]
>> 12.9 µs ± 60.4 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
%timeit [randint(0, 9) for i in range(0, 15)]
>> 20 µs ± 386 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
Ghi chú:
1.> np.random.randint tạo các số nguyên ngẫu nhiên trong khoảng thời gian nửa mở [thấp, cao).
2.> np.random.uniform tạo ra các số phân phối đồng đều trong khoảng thời gian nửa mở [thấp, cao).
3.> Random.randrange (dừng) tạo một số ngẫu nhiên từ phạm vi (bắt đầu, dừng, bước).
4.> Random.randint (a, b) trả về một số nguyên N ngẫu nhiên sao cho a <= N <= b.
5.> astype (int) chuyển mảng numpy thành kiểu dữ liệu int.
6.> Tôi đã chọn kích thước = (15,). Điều này sẽ cung cấp cho bạn một mảng dài có độ dài = 15.
%timeit
làm việc trong môi trường của bạn?
Trong trường hợp số liên tục randint
hoặc randrange
có thể là lựa chọn tốt nhất nhưng nếu bạn có một vài giá trị riêng biệt trong một chuỗi (tức là a list
), bạn cũng có thể sử dụng choice
:
>>> import random
>>> values = list(range(10))
>>> random.choice(values)
5
choice
cũng hoạt động cho một mục từ một mẫu không liên tục:
>>> values = [1, 2, 3, 5, 7, 10]
>>> random.choice(values)
7
Nếu bạn cần nó "mạnh về mặt mật mã" thì cũng có một secrets.choice
python 3.6 và mới hơn:
>>> import secrets
>>> values = list(range(10))
>>> secrets.choice(values)
2
random.sample
. Với sự thay thế, bạn có thể sử dụng một sự hiểu biết với choice
: ví dụ cho một danh sách chứa 3 giá trị ngẫu nhiên với sự thay thế:[choice(values) for _ in range(3)]
Trong khi nhiều bài viết trình bày cách lấy một số nguyên ngẫu nhiên, câu hỏi ban đầu hỏi cách tạo số nguyên ngẫu nhiên s (số nhiều):
Làm cách nào tôi có thể tạo số nguyên ngẫu nhiên trong khoảng từ 0 đến 9 (đã bao gồm) trong Python?
Để rõ ràng, ở đây chúng tôi trình bày cách lấy nhiều số nguyên ngẫu nhiên.
Được
>>> import random
lo = 0
hi = 10
size = 5
Mã
Nhiều, số nguyên ngẫu nhiên
# 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]
Mẫu số nguyên ngẫu nhiên
# F
>>> random.choices(range(lo, hi), k=size)
[3, 2, 0, 8, 2]
# G
>>> random.sample(range(lo, hi), k=size)
[4, 5, 1, 2, 3]
Chi tiết
Một số bài viết trình bày cách tạo ra nhiều số nguyên ngẫu nhiên. 1 Dưới đây là một số tùy chọn giải quyết câu hỏi ngụ ý:
random.random
trả về một float ngẫu nhiên trong phạm vi[0.0, 1.0)
random.randint
trả về một số nguyên ngẫu nhiên N
sao choa <= N <= b
random.randrange
bí danh đểrandint(a, b+1)
random.shuffle
xáo trộn một chuỗi tại chỗrandom.choice
trả về một phần tử ngẫu nhiên từ chuỗi không trốngrandom.choices
trả về các k
lựa chọn từ một quần thể (có thay thế, Python 3.6+)random.sample
trả về k
các lựa chọn duy nhất từ dân số (không thay thế): 2Xem thêm bài nói chuyện của R. Hettinger về Chunking và Aliasing bằng các ví dụ từ random
mô-đun.
Dưới đây là so sánh một số chức năng ngẫu nhiên trong Thư viện chuẩn và Numpy:
| | random | numpy.random |
|-|-----------------------|----------------------------------|
|A| random() | random() |
|B| randint(low, high) | randint(low, high) |
|C| randrange(low, high) | randint(low, high) |
|D| shuffle(seq) | shuffle(seq) |
|E| choice(seq) | choice(seq) |
|F| choices(seq, k) | choice(seq, size) |
|G| sample(seq, k) | choice(seq, size, replace=False) |
Bạn cũng có thể nhanh chóng chuyển đổi một trong nhiều bản phân phối trong Numpy thành một mẫu các số nguyên ngẫu nhiên. 3
Ví dụ
>>> np.random.normal(loc=5, scale=10, size=size).astype(int)
array([17, 10, 3, 1, 16])
>>> np.random.poisson(lam=1, size=size).astype(int)
array([1, 3, 0, 2, 0])
>>> np.random.lognormal(mean=0.0, sigma=1.0, size=size).astype(int)
array([1, 3, 1, 5, 1])
1 Cụ thể là @John Lawrence Aspden, @ST Mohammed, @SiddTheKid, @ user14372, @zangw, et al. 2 @prashanth đề cập đến mô-đun này hiển thị một số nguyên. 3 Chứng minh bởi @Siddharth Satpathy
Nếu bạn muốn sử dụng numpy thì hãy sử dụng như sau:
import numpy as np
print(np.random.randint(0,10))
>>> import random
>>> random.randrange(10)
3
>>> random.randrange(10)
1
Để có được danh sách mười mẫu:
>>> [random.randrange(10) for x in range(10)]
[9, 0, 4, 0, 5, 7, 4, 3, 6, 8]
Tạo số nguyên ngẫu nhiên trong khoảng từ 0 đến 9.
import numpy
X = numpy.random.randint(0, 10, size=10)
print(X)
Đầu ra:
[4 8 0 4 9 6 9 9 0 7]
Cách tốt nhất là sử dụng chức năng nhập ngẫu nhiên
import random
print(random.sample(range(10), 10))
hoặc không có bất kỳ nhập thư viện:
n={}
for i in range(10):
n[i]=i
for p in range(10):
print(n.popitem()[1])
ở đây các popitems loại bỏ và trả về một giá trị tùy ý từ từ điển n
.
Đây là một cách tiếp cận toán học nhiều hơn nhưng nó hoạt động 100% thời gian:
Giả sử bạn muốn sử dụng random.random()
hàm để tạo số giữa a
và b
. Để đạt được điều này, chỉ cần làm như sau:
num = (b-a)*random.random() + a;
Tất nhiên, bạn có thể tạo ra nhiều số hơn.
Từ trang tài liệu cho mô-đun ngẫu nhiên :
Cảnh báo: Không nên sử dụng các bộ tạo giả ngẫu nhiên của mô-đun này cho mục đích bảo mật. Sử dụng os.urandom () hoặc SystemRandom nếu bạn yêu cầu trình tạo số giả ngẫu nhiên an toàn bằng mật mã.
Random.SystemRandom , được giới thiệu trong Python 2.4, được coi là bảo mật bằng mật mã . Nó vẫn có sẵn trong Python 3.7.1, hiện tại tại thời điểm viết.
>>> import string
>>> string.digits
'0123456789'
>>> import random
>>> random.SystemRandom().choice(string.digits)
'8'
>>> random.SystemRandom().choice(string.digits)
'1'
>>> random.SystemRandom().choice(string.digits)
'8'
>>> random.SystemRandom().choice(string.digits)
'5'
Thay vì string.digits
, range
có thể được sử dụng cho một số câu trả lời khác cùng với một sự hiểu biết. Trộn và kết hợp theo nhu cầu của bạn.
OpenTURNS cho phép không chỉ mô phỏng các số nguyên ngẫu nhiên mà còn xác định phân phối liên quan với UserDefined
lớp được xác định.
Sau đây mô phỏng 12 kết quả của phân phối.
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)
Bản in này:
0 [8]
1 [7]
2 [4]
3 [7]
4 [3]
5 [3]
6 [2]
7 [9]
8 [0]
9 [5]
10 [9]
11 [6]
Dấu ngoặc ở đó vì x
là một Point
chiều. Sẽ dễ dàng hơn để tạo ra 12 kết quả trong một cuộc gọi đến getSample
:
sample = distribution.getSample(12)
sẽ sản xuất:
>>> print(sample)
[ v0 ]
0 : [ 3 ]
1 : [ 9 ]
2 : [ 6 ]
3 : [ 3 ]
4 : [ 2 ]
5 : [ 6 ]
6 : [ 9 ]
7 : [ 5 ]
8 : [ 9 ]
9 : [ 5 ]
10 : [ 3 ]
11 : [ 2 ]
Thông tin chi tiết về chủ đề này có tại đây: http://openturns.github.io/openturns/master/user_manual/_generated/openturns.UserDefined.html
Tôi đã có may mắn hơn với điều này cho Python 3.6
str_Key = ""
str_RandomKey = ""
for int_I in range(128):
str_Key = random.choice('0123456789')
str_RandomKey = str_RandomKey + str_Key
Chỉ cần thêm các ký tự như 'ABCD' và 'abcd' hoặc '^! ~ = -> <' để thay đổi nhóm ký tự cần kéo, thay đổi phạm vi để thay đổi số lượng ký tự được tạo.