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

Python random.shuffle()로 리스트 섞기: 단계별 완벽 가이드

Python의 random.shuffle() 메서드는 리스트에 있는 항목들의 순서를 무작위로 변경합니다. 인덱싱과 함께 사용하면 리스트에서 임의의 항목을 선택하는 데 매우 유용합니다. 이 메서드는 하나의 인자, 즉 순서를 변경하고 싶은 리스트를 받습니다.


리스트의 항목 순서를 무작위로 바꾸고 싶은 상황을 마주할 수 있습니다. 예를 들어, 매장에서 진행하는 추첨 행사의 당첨자를 뽑는 프로그램을 만든다고 가정해 보겠습니다. 참가자 명단을 무작위로 재배열하여 당첨자를 선정하도록 만들고 싶을 것입니다.

바로 이럴 때 random.shuffle() 메서드가 유용합니다. random.shuffle() 메서드는 Python의 random 모듈에 속해 있으며, 리스트의 항목들을 무작위로 재정렬하는 데 사용됩니다. 이 튜토리얼에서는 random.shuffle() 메서드를 사용하는 방법을 자세히 알아보겠습니다.

Python 리스트 셔플(Shuffle)이란?

random.shuffle() 함수는 리스트의 항목들을 무작위로 재정렬합니다. 이 메서드는 리스트에서 임의의 항목을 가져오고 싶은 애플리케이션에서 유용하게 활용됩니다. 주의할 점은 random.shuffle() 메서드가 원본 리스트를 직접 수정한다는 것입니다. 즉, 새로운 리스트를 생성하지 않습니다.

리스트(list)는 데이터의 모음을 저장하는 자료구조입니다. Python 리스트는 순서가 있기 때문에, 항목을 리스트에 저장하면 그 위치가 그대로 유지됩니다. 이것은 리스트의 중요한 특징이지만, 때로는 리스트의 순서를 섞어야 하는 프로그램을 만들어야 할 수도 있습니다.

random.shuffle()은 Python에서 의사 난수 생성기를 구현하는 random 라이브러리의 일부입니다. 따라서 random.shuffle() 메서드를 사용하기 전에 먼저 random 라이브러리를 코드로 가져와야(import) 합니다. 다음 코드를 추가하면 됩니다:

import random

random.shuffle() 문법

random.shuffle() 메서드의 기본 문법은 다음과 같습니다:

import random

random.shuffle(list_name, function)

random.shuffle() 메서드는 두 개의 매개변수를 받습니다:

  • list_name: 순서를 섞고자 하는 list, tuple, 또는 string (필수).
  • function: 0.0과 1.0 사이의 임의의 부동소수점(float)을 반환하는 함수의 이름, 또는 해당 범위 내의 다른 부동소수점 값 (선택 사항).

function 매개변수를 random.shuffle()과 함께 사용하는 경우는 드뭅니다. 이 매개변수는 값에 서로 다른 가중치를 두는 사용자 지정 셔플 알고리즘을 적용하고 싶을 때만 사용합니다. 따라서 이 튜토리얼에서는 random.shuffle()의 function 매개변수는 다루지 않습니다.

문자열이나 튜플에도 random.shuffle() 메서드를 사용할 수 있습니다. 어느 경우든 random.shuffle()은 원본 데이터를 직접 수정합니다. 새로운 문자열이나 새로운 튜플처럼 새로운 값을 생성하지 않는다는 점을 기억하세요.

Python random.shuffle() 실전 예제

매장에서 추첨 행사를 진행한다고 가정해 보겠습니다. 1등 당첨자는 매장의 어떤 제품이든 구매할 수 있는 100달러 상품권을 받고, 2등은 50달러, 3등은 25달러 상품권을 받습니다.

추첨에 응모한 모든 사람의 이름이 담긴 리스트가 있습니다. 우리의 목표는 이 리스트를 무작위 순서로 재배열하여 당첨자를 결정하는 것입니다. 이를 위해 random.shuffle() 메서드를 사용하겠습니다.

다음은 리스트의 순서를 무작위로 재정렬하여 당첨자를 확인하는 코드입니다:

import random

raffle_entrants = ['Thomas Crane', 'Braden Cox', 'Adie Paulson', 'Leonardo Downs', 'Lindsay Knapp', 'Carl Sanderson']

print('Entrants (ordered)')
print(raffle_entrants)

print('Winners (random order)')
random.shuffle(raffle_entrants)
print(raffle_entrants)

코드를 실행하면 다음과 같은 결과가 출력됩니다:

Entrants (ordered)
['Thomas Crane', 'Braden Cox', 'Adie Paulson', 'Leonardo Downs', 'Lindsay Knapp', 'Carl Sanderson']
Winners (random order)
['Adie Paulson', 'Braden Cox', 'Carl Sanderson', 'Leonardo Downs', 'Thomas Crane', 'Lindsay Knapp']

첫 번째 줄에서는 Python import 문을 사용하여 random 라이브러리를 가져옵니다. 이 라이브러리에는 코드 뒷부분에서 사용할 random.shuffle() 메서드가 포함되어 있습니다. 그다음, 추첨에 응모한 모든 사람의 이름을 담은 raffle_entrants라는 Python 변수를 선언합니다.

다음 두 줄에서는 콘솔에 "Entrants (ordered)"라는 메시지와 함께 raffle_entrants 리스트의 내용을 출력합니다. 이를 통해 프로그램이 리스트를 섞기 전의 상태를 먼저 확인할 수 있습니다.

이후 콘솔에 "Winners (random order)"라는 메시지를 출력합니다. 그런 다음 코드는 random.shuffle() 메서드를 사용하여 raffle_entrants 리스트의 내용을 섞습니다. 마지막으로, random.shuffle()로 섞인 후의 raffle_entrants 리스트를 출력합니다.

이제 무작위로 섞인 이름 목록이 완성되었습니다. 위 예제의 결과에 따르면 Braden Cox가 1등, Thomas Crane이 2등, Leonardo Downs가 3등에 당첨된 것을 알 수 있습니다.

코드 검증하기

같은 코드를 다시 실행하면 새롭게 정렬된 Python 리스트를 얻게 됩니다. 코드를 두 번째 실행했을 때의 결과는 다음과 같습니다:

Entrants (ordered)
['Thomas Crane', 'Braden Cox', 'Adie Paulson', 'Leonardo Downs', 'Lindsay Knapp', 'Carl Sanderson']
Winners (random order)
['Braden Cox', 'Lindsay Knapp', 'Carl Sanderson', 'Leonardo Downs', 'Thomas Crane', 'Adie Paulson']

따라서 random.shuffle()을 사용할 때마다 무작위로 정렬된 리스트(엄밀히 말하면 의사 난수로 정렬된 리스트)가 반환된다는 것을 확인할 수 있습니다.

마무리

Python에서는 random.shuffle() 메서드를 사용하여 리스트 항목의 순서를 간편하게 무작위로 변경할 수 있습니다. 우리의 예제에서 random.shuffle()은 응모자 명단에서 추첨 당첨자를 무작위로 선정하는 프로그램을 만드는 데 큰 도움이 되었습니다.

Python 프로그래밍에 대해 더 배우고 싶으신가요? Python 학습 가이드를 확인해 보세요. 이 가이드에서는 Python을 효과적으로 배우는 핵심 팁과 함께, Python 실력을 한 단계 끌어올리는 데 도움이 되는 학습 자료와 강좌 목록도 함께 제공합니다.