Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬에서 리스트에 포함되지 않은 난수를 선택하는 방법

파이썬에서 리스트에 없는 난수 선택하기

주어진 리스트에 포함되지 않은 난수가 필요한 경우가 종종 있습니다. 가장 직관적인 방법은 지정된 범위 안에서 난수를 계속 생성하다가, 생성된 값이 리스트에 존재하지 않으면 반복을 멈추는 것입니다.

기본 구현: while 루프와 not in 연산자

random 모듈의 randrange() 함수로 난수를 생성하고, not in 멤버십 연산자로 해당 값이 리스트에 없는지 검사할 수 있습니다.

>>> import random
>>> l1 = [2, 4, 7]
>>> while True:
        x = random.randrange(1, 10)
        if x not in l1:
            break
>>> x
6

위 코드는 1부터 9 사이의 정수를 무작위로 뽑고, 그 값이 리스트 l1에 이미 있다면 다시 뽑기를 반복합니다. 리스트에 없는 값(예: 6)이 나오면 루프가 종료되고 변수 x에 저장됩니다.

더 효율적인 방법: 후보 목록 만들기

리스트가 크거나 범위 대비 제외할 숫자가 많다면, 매번 난수를 뽑아 검사하는 방식은 비효율적일 수 있습니다. 이럴 때는 리스트 컴프리헨션으로 허용되는 숫자만 미리 추려낸 뒤 random.choice()로 하나를 고르는 것이 좋습니다.

>>> import random
>>> l1 = [2, 4, 7]
>>> candidates = [n for n in range(1, 10) if n not in l1]
>>> x = random.choice(candidates)
>>> x
6

이 방식은 반복 횟수와 무관하게 항상 한 번의 선택으로 결과를 얻을 수 있어, 후보 개수가 충분한 경우 더 안정적입니다.

정리

  • while 루프 방식: 간단하고 직관적이지만, 운이 나쁘면 여러 번 반복해야 할 수 있습니다.
  • 후보 목록 방식: 제외할 값을 미리 걸러내므로 항상 한 번에 결과를 얻습니다.

두 방법 모두 random 모듈과 not in 연산자를 활용한다는 점은 동일하며, 상황에 맞게 선택하면 됩니다.