0에서 9 사이의 임의의 정수 생성


1336

파이썬에서 0에서 9 사이의 임의의 정수를 어떻게 생성 할 수 있습니까?

예를 들어, 0, 1, 2, 3, 4, 5, 6, 7, 8,9


16
0-9의 "무작위"세대에 대한 멋진 스타일 포인트
ColinMac

답변:



465
import random
print(random.randint(0,9))

random.randint(a, b)

a <= N <= b가되도록 난수 N을 반환합니다.

문서 : https://docs.python.org/3.1/library/random.html#random.randint


1
최신 Python 버전에서는 상한이 독점적 인 것으로 보입니다 (즉, randint(0,9)9를 반환하지 않습니다). 이것은 온라인 설명서에는 반영되어 있지 않지만 내장 된 도움말에 있습니다.
Yly

134

이 시도:

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)

81
from random import randint

x = [randint(0, 9) for p in range(0, 10)]

0에서 9 사이의 10 개의 의사 난수 정수를 생성합니다.


63

secrets모듈은 Python 3.6의 새로운 기능입니다. 이것은 random암호화 또는 보안 용 모듈 보다 낫습니다 .

0-9 범위의 정수를 무작위로 인쇄하려면 다음을 수행하십시오.

from secrets import randbelow
print(randbelow(10))

자세한 내용은 PEP 506을 참조하십시오 .


3
이것은 답변을 향상시키고 추가해야합니다. 가능한 경우 보안을 강화한 답변을 항상 추가해야합니다.
SudoKid

30

배열의 크기를 선택하십시오 (이 예에서는 크기를 20으로 선택했습니다). 그런 다음 다음을 사용하십시오.

import numpy as np   
np.random.randint(10, size=(1, 20))

다음 형식의 출력을 볼 수 있습니다 ( 실행할 때마다 다른 임의의 정수가 리턴되므로 출력 배열의 정수가 아래 제공된 예와 다를 수 있음 ).

array([[1, 6, 1, 2, 8, 6, 3, 3, 2, 5, 6, 5, 0, 9, 5, 6, 4, 5, 9, 3]])

2
또한 Numpy가 단일 난수뿐만 아니라 지정된 크기의 난수 배열을 생성하는 방법을 아는 것도 도움이됩니다. (Docs : numpy.random.randint )
jkdev

28

이것을 통해보십시오 random.shuffle

>>> import random
>>> nums = range(10)
>>> random.shuffle(nums)
>>> nums
[6, 3, 5, 4, 0, 1, 2, 9, 8, 7]

정답이 아니므로 삭제해야합니다.
Nicolas Gervais '

21

다음 중 하나를 시도합니다.

1.> numpy.random.randint

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])

2.> numpy.random.uniform

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.> random.randrange

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.> random.randint

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]

속도:

np.random.randint가장 빠르며 그 뒤에 np.random.uniformrandom.randrange옵니다 . random.randint가장 느 립니다.

np.random.randintnp.random.uniform은 random.randrange 및 random.randint보다 훨씬 빠릅니다 (~ 8 ~ 12 배 빠름) .

%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)

노트:

1.> np.random.randint 는 반 개방 간격 [낮음, 높음]에 걸쳐 임의의 정수를 생성합니다.

2.> np.random.uniform 은 반 개방 간격 [낮음, 높음]에 걸쳐 균일하게 분포 된 숫자를 생성합니다.

3.> random.randrange (stop) 은 range (start, stop, step)에서 난수를 생성합니다.

4.> random.randint (a, b) 는 a <= N <= b가되도록 임의의 정수 N을 반환합니다.

5.> astype (int) 는 numpy 배열을 int 데이터 형식으로 캐스팅합니다.

6.> size = (15,)를 선택했습니다. 이것은 길이 = 15의 numpy 배열을 제공합니다.


18

연속 숫자의 경우 randint또는 randrange아마도 최선의 선택이지만 시퀀스에 여러 개의 고유 값이있는 경우 (예 : a list) 다음을 사용할 수도 있습니다 choice.

>>> import random
>>> values = list(range(10))
>>> random.choice(values)
5

choice 연속적이지 않은 샘플에서 하나의 항목에 대해서도 작동합니다.

>>> values = [1, 2, 3, 5, 7, 10]
>>> random.choice(values)
7

"암호 적으로 강력한"필요한 경우 secrets.choicePython 3.6 이상이 있습니다.

>>> import secrets
>>> values = list(range(10))
>>> secrets.choice(values)
2

시퀀스에서 더 많은 숫자를 원한다면 어떻게해야합니까?
Gunjan naik

교체가 필요하지 않은 경우 : random.sample. 교체하면와 이해를 사용할 수 있습니다 choice: 예를 들어 교체로 3 개 임의의 값을 포함하는 목록 :[choice(values) for _ in range(3)]
MSeifert

18

많은 게시물이 하나의 임의의 정수 를 얻는 방법을 보여 주지만 원래 질문은 임의의 정수 s (복수) 를 생성하는 방법을 묻습니다 .

파이썬에서 0에서 9 사이의 임의의 정수를 어떻게 생성 할 수 있습니까?

명확성을 위해 여기에서 여러 개의 임의 정수를 얻는 방법을 보여줍니다.

주어진

>>> import random


lo = 0
hi = 10
size = 5

암호

여러 개의 임의의 정수

# 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]

임의의 정수 샘플

# 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]

세부

일부 게시물은 기본적으로 여러 임의의 정수를 생성하는 방법을 보여줍니다 . 1 다음은 묵시적 ​​질문을 해결하는 몇 가지 옵션입니다.

  • A : random.random범위 내에서 임의의 부동 소수점을 반환합니다[0.0, 1.0)
  • B는 : random.randint임의의 정수를 반환 N하는 등a <= N <= b
  • C : random.randrange별칭randint(a, b+1)
  • D : random.shuffle순서대로 순서 섞기
  • E : random.choice비어 있지 않은 시퀀스에서 임의의 요소를 반환
  • F : 모집단에서 선택 항목을 random.choices반환합니다 k(Python 3.6 이상).
  • G : 모집단에서 고유 한 선택 항목을 random.sample반환합니다 k(교체하지 않음) : 2

모듈의 예제를 사용하여 청킹 및 앨리어싱에 대한 R. Hettinger의 이야기 를 참조하십시오 random.

다음은 표준 라이브러리와 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) |

Numpy 의 여러 분포 중 하나 를 임의의 정수 샘플 로 빠르게 변환 할 수도 있습니다 .

>>> 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 즉, @John Lawrence Aspden, @ST Mohammed, @SiddTheKid, @ user14372, @zangw, et al. 2 @prashanth는 하나의 정수를 보여주는이 모듈을 언급합니다. 3 @Siddharth Satpathy 시연


14

numpy를 사용하려면 다음을 사용하십시오.

import numpy as np
print(np.random.randint(0,10))

1
"numpy"에 대해 말해 줄 수 있습니다.
Simón

11
네. 링크 주셔서 감사합니다. 그러나 나는 두 줄의 코드를 인용하기 전에 세부 정보를 제공함으로써 답변을 향상시킬 수 있음을 의미했습니다. 어떤 이유에서든 누군가가 이미 내장 된 것 대신에 그것을 사용하는 것을 선호 할 것입니다.
Simón

9
>>> import random
>>> random.randrange(10)
3
>>> random.randrange(10)
1

10 개의 샘플 목록을 얻으려면

>>> [random.randrange(10) for x in range(10)]
[9, 0, 4, 0, 5, 7, 4, 3, 6, 8]


6

random.sample 사용할 수있는 또 다른

import random
n = 1 # specify the no. of numbers
num = random.sample(range(10),  n)
num[0] # is the required number

6

가장 좋은 방법은 import random 함수를 사용하는 것입니다

import random
print(random.sample(range(10), 10))

또는 라이브러리 가져 오기없이 :

n={} 
for i in range(10):
    n[i]=i

for p in range(10):
    print(n.popitem()[1])

여기서 popitems 는 사전에서 임의의 값을 제거하고 반환합니다 n.


3

이것은 수학적 접근 방식에 가깝지만 100 % 작동합니다.

random.random()함수를 사용하여 a및 사이의 숫자를 생성 한다고 가정 해 보겠습니다 b. 이를 위해서는 다음을 수행하십시오.

num = (b-a)*random.random() + a;

물론 더 많은 숫자를 생성 할 수 있습니다.


2

랜덤 모듈 의 문서 페이지에서 :

경고 :이 모듈의 의사 랜덤 생성기는 보안 목적으로 사용해서는 안됩니다. 암호로 안전한 의사 난수 생성기가 필요한 경우 os.urandom () 또는 SystemRandom을 사용하십시오.

Python 2.4에서 도입 된 random.SystemRandom암호화 적으로 안전한 것으로 간주됩니다 . 파이썬 3.7.1에서는 여전히 쓸 수 있습니다.

>>> 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'

대신 string.digits, range아마도 이해와 함께 다른 몇 가지 답변에 따라 사용할 수 있습니다. 필요에 따라 믹스 앤 매치하십시오.


0

OpenTURNS는 임의의 정수를 시뮬레이션 할뿐만 아니라 UserDefined정의 된 클래스 와 연관된 분포를 정의 할 수 있습니다.

다음은 분포의 12 가지 결과를 시뮬레이션합니다.

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)

인쇄합니다 :

0 [8]
1 [7]
2 [4]
3 [7]
4 [3]
5 [3]
6 [2]
7 [9]
8 [0]
9 [5]
10 [9]
11 [6]

때문에 괄호가 있습니다 xA는 Point1 차원에서. 한 번의 호출로 12 개의 결과를 생성하는 것이 더 쉬울 것입니다 getSample.

sample = distribution.getSample(12)

생산 :

>>> 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  ]

이 주제에 대한 자세한 내용은 다음과 같습니다. http://openturns.github.io/openturns/master/user_manual/_generated/openturns.UserDefined.html


-1

파이썬 3.6에서 더 좋은 결과를 얻었습니다.

str_Key = ""                                                                                                
str_RandomKey = ""                                                                                          
for int_I in range(128):                                                                                    
      str_Key = random.choice('0123456789')
      str_RandomKey = str_RandomKey + str_Key 

'ABCD'및 'abcd'또는 '^! ~ =-> <'와 같은 문자를 추가하여 가져올 풀을 변경하고 범위를 변경하여 생성 된 문자 수를 변경하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.