programing

리스트에서 아이템을 랜덤으로 선택하려면 어떻게 해야 하나요?

nicescript 2022. 12. 9. 22:05
반응형

리스트에서 아이템을 랜덤으로 선택하려면 어떻게 해야 하나요?

다음 목록에서 항목을 임의로 검색하려면 어떻게 해야 합니까?

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

secretsPython 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를 사용하여 모듈화하다choicemethod - 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방법

samplemethod는 원래 모집단을 변경하지 않고 모집단의 요소를 포함하는 새 목록을 반환합니다.모든 서브슬라이스도 유효한 랜덤샘플이 되도록 결과 목록이 선택 순서대로 표시됩니다.

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

반응형