리스트에서 아이템을 랜덤으로 선택하려면 어떻게 해야 하나요?
다음 목록에서 항목을 임의로 검색하려면 어떻게 해야 합니까?
foo = ['a', 'b', 'c', 'd', 'e']
사용방법:
import random
foo = ['a', 'b', 'c', 'd', 'e']
print(random.choice(foo))
암호로 안전한 랜덤 선택(워드 리스트에서 패스프레이즈를 생성하는 경우 등)에는 다음을 사용합니다.
import secrets
foo = ['battery', 'correct', 'horse', 'staple']
print(secrets.choice(foo))
secrets
Python 3.6에는 새로운 기능이 있습니다.이전 버전의 Python에서는 다음 클래스를 사용할 수 있습니다.
import random
secure_random = random.SystemRandom()
print(secure_random.choice(foo))
을 무작위로 하고 싶다면 이 항목을 사용하는 것이 random.sample
★★★★★★ 。
import random
group_of_items = {'a', 'b', 'c', 'd', 'e'} # 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]
시 구문 "", "1" 또는 "1"을할 수 덜 복잡합니다.random.sample(some_list, 1)[0]
random.choice(some_list)
.
단, 시퀀스(리스트나 튜플 등)의 단일 출력에 대해서만 선택사항이 기능합니다.random.choice(tuple(some_set))
한 세트에서 단일 항목을 가져오는 옵션이 될 수 있습니다.
편집: 비밀 사용
많은 사람들이 지적했듯이 보다 안전한 의사 난수 샘플이 필요한 경우 비밀 모듈을 사용해야 합니다.
import secrets # imports secure module.
secure_random = secrets.SystemRandom() # creates a secure random object.
group_of_items = {'a', 'b', 'c', 'd', 'e'} # 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]
편집: Phythonic 원라이너
여러 아이템을 선택하기 위해 보다 피토닉한 원라이너를 원하는 경우 언팩을 사용할 수 있습니다.
import random
first_random_item, second_random_item = random.sample({'a', 'b', 'c', 'd', 'e'}, 2)
인덱스가 필요한 경우 다음을 사용하십시오.
from random import randrange
random_index = randrange(len(foo))
print(foo[random_index])
Python 3.6부터는 모듈을 사용할 수 있으며, 이는 암호화 또는 보안 용도로 모듈보다 더 적합합니다.
목록에서 임의 요소를 인쇄하려면:
import secrets
foo = ['a', 'b', 'c', 'd', 'e']
print(secrets.choice(foo))
랜덤 인덱스를 인쇄하려면:
print(secrets.randbelow(len(foo)))
상세한 것에 대하여는, PEP 506 를 참조해 주세요.
랜덤으로 픽업된 아이템이 비워질 때까지 리스트에서 삭제하는 스크립트를 제안합니다.
「」를 유지하다set
로 픽업된합니다.choice
★★★★★★★★★★★★★★★★★★★★★★★★★」
s=set(range(1,6))
import random
while len(s)>0:
s.remove(random.choice(list(s)))
print(s)
세 번의 주행은 세 가지 다른 답을 제공합니다.
>>>
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
Python 2의 경우:
random_items = random.sample(population=foo, k=number_of_samples)
Python 3의 경우:
random_items = random.choices(population=foo, k=number_of_samples)
NumPy 솔루션:
질문의 경우 답변과 합니다.import random; random.choice()
가 이미 이 있기
또한 실제 사용 사례와 관련된 두 가지 방법 사이에는 몇 가지 차이점이 있을 수 있습니다.
import numpy as np
np.random.choice(foo) # randomly selects a single item
재현성을 위해 다음을 수행할 수 있습니다.
np.random.seed(123)
np.random.choice(foo) # first call will always return 'c'
1개 이상의 아이템 샘플의 경우, 1개의 아이템으로 반환됩니다.array
을합니다.size
★★★★
np.random.choice(foo, 5) # sample with replacement (default)
np.random.choice(foo, 5, False) # sample without replacement
색인이 필요한 경우 다음을 사용하십시오.
import random
foo = ['a', 'b', 'c', 'd', 'e']
print int(random.random() * len(foo))
print foo[int(random.random() * len(foo))]
random.choice도 마찬가지입니다).
리스트에서 아이템을 랜덤으로 선택하는 방법
다음과 같은 목록이 있다고 가정합니다.
foo = ['a', 'b', 'c', 'd', 'e']
이 목록에서 항목을 임의로 검색하는 가장 간단한 방법은 무엇입니까?
정말 무작위로 접근하고 싶다면secrets.choice
표준 라이브러리(Python 3.6의 새로운 기능):
>>> from secrets import choice # Python 3 only
>>> choice(list('abcde'))
'c'
위의 내용은 이전 권장사항과 동일합니다.SystemRandom
에서 이의를 제기하다random
를 사용하여 모듈화하다choice
method - Python 2의 이전 버전:
>>> import random # Python 2 compatible
>>> sr = random.SystemRandom()
>>> foo = list('abcde')
>>> foo
['a', 'b', 'c', 'd', 'e']
그리고 지금:
>>> 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'
결정론적 의사 난수를 선택하려면choice
함수(실제로는 Bound 메서드)Random
오브젝트):
>>> random.choice
<bound method Random.choice of <random.Random object at 0x800c1034>>
랜덤으로 보이지만 실제로는 그렇지 않습니다.반복적으로 다시 장착하면 알 수 있습니다.
>>> 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')
코멘트:
이건 무작위인지 아닌지에 대한 문제가 아니야.선택은 정말 무작위인지 아닌지.시드를 수정하면 재현 가능한 결과를 얻을 수 있습니다.그것이 시드의 설계입니다.시드를 SystemRandom에도 전달할 수 있습니다.
sr = random.SystemRandom(42)
네, "시드" 인수로 전달할 수 있지만 오브젝트가 단순히 무시한다는 것을 알 수 있습니다.
def seed(self, *args, **kwds):
"Stub method. Not used for a system random number generator."
return None
목록 및 랜덤화 작업에 랜덤 모듈을 주로 사용합니다.
import random
foo = ['a', 'b', 'c', 'd', 'e']
print(random.choice(foo))
요컨대, 사용random.sample
방법
그sample
method는 원래 모집단을 변경하지 않고 모집단의 요소를 포함하는 새 목록을 반환합니다.모든 서브슬라이스도 유효한 랜덤샘플이 되도록 결과 목록이 선택 순서대로 표시됩니다.
import random
lst = ['a', 'b', 'c', 'd', 'e']
random.seed(0) # remove this line, if you want different results for each run
rand_lst = random.sample(lst,3) # 3 is the number of sample you want to retrieve
print(rand_lst)
Output:['d', 'e', 'a']
다음은 실행 코드 https://onecompiler.com/python/3xem5jjvz 입니다.
랜덤 인덱스를 정의하는 변수가 있는 코드는 다음과 같습니다.
import random
foo = ['a', 'b', 'c', 'd', 'e']
randomindex = random.randint(0,len(foo)-1)
print (foo[randomindex])
## print (randomindex)
변수가 없는 코드는 다음과 같습니다.
import random
foo = ['a', 'b', 'c', 'd', 'e']
print (foo[random.randint(0,len(foo)-1)])
그리고 가장 짧고 현명한 방법으로 이 작업을 수행할 수 있는 코드는 다음과 같습니다.
import random
foo = ['a', 'b', 'c', 'd', 'e']
print(random.choice(foo))
(표준 2.7)
임의 항목 선택:
import random
my_list = [1, 2, 3, 4, 5]
num_selections = 2
new_list = random.sample(my_list, num_selections)
목록의 순서를 유지하기 위해 다음을 수행할 수 있습니다.
randIndex = random.sample(range(len(my_list)), n_selections)
randIndex.sort()
new_list = [my_list[i] for i in randIndex]
https://stackoverflow.com/a/49682832/4383027 복제
다음과 같이 할 수 있습니다.
from random import randint
foo = ["a", "b", "c", "d", "e"]
print(foo[randint(0,4)])
이것은 이미 해답이 될 수 있지만 당신은 그것을 사용할 수 있다.random.shuffle
. 예:
import random
foo = ['a', 'b', 'c', 'd', 'e']
random.shuffle(foo)
여기서 권장되는 방법은 명시적 RNG를 사용하는 것입니다.
from numpy.random import default_rng
rng = default_rng()
rng.choice(foo)
랜딘트를 사용해서도 할 수 있어요.
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)
언급URL : https://stackoverflow.com/questions/306400/how-can-i-randomly-select-an-item-from-a-list
'programing' 카테고리의 다른 글
각각 Javascript를 중지하는 방법 (0) | 2022.12.09 |
---|---|
일정 시간 후 페이지 리디렉션 PHP (0) | 2022.12.09 |
php 함수는 기본적으로 무엇을 반환합니까? (0) | 2022.12.09 |
Python은 주문 세트를 가지고 있습니까? (0) | 2022.12.09 |
이클립스에서의 라인 번호 카운트 (0) | 2022.12.09 |