파이썬에서 리스트 순서 무작위로 섞기

Beginner

This tutorial is from open-source community. Access the source code

소개

Python 에서 리스트는 항목들의 정렬된 컬렉션입니다. 때때로, 리스트 내 항목들의 순서를 무작위로 섞고 싶을 수 있습니다. 이는 게임, 시뮬레이션 또는 무작위성을 도입하려는 다른 상황에서 유용할 수 있습니다. 이 챌린지에서는 리스트 내 항목들을 섞는 함수를 작성합니다.

리스트 섞기 (Shuffle List)

입력으로 리스트를 받아 무작위 순서로 동일한 항목들을 포함하는 새로운 리스트를 반환하는 함수 shuffle(lst)를 작성하십시오. 함수는 리스트 내 항목들을 섞기 위해 Fisher-Yates 알고리즘을 사용해야 합니다.

Fisher-Yates 알고리즘은 다음과 같이 작동합니다.

  1. 리스트의 마지막 항목부터 시작합니다.
  2. 0 과 현재 인덱스 사이의 임의의 인덱스를 생성합니다.
  3. 현재 인덱스의 항목을 임의의 인덱스의 항목과 교환합니다.
  4. 리스트의 다음 항목으로 이동하여 모든 항목이 섞일 때까지 2-3 단계를 반복합니다.

함수는 원래 리스트를 수정해서는 안 됩니다. 대신, 섞인 항목들을 포함하는 새로운 리스트를 생성해야 합니다.

입력 리스트에는 최소한 하나의 항목이 포함되어 있다고 가정할 수 있습니다.

from copy import deepcopy
from random import randint

def shuffle(lst):
  temp_lst = deepcopy(lst)
  m = len(temp_lst)
  while (m):
    m -= 1
    i = randint(0, m)
    temp_lst[m], temp_lst[i] = temp_lst[i], temp_lst[m]
  return temp_lst
foo = [1, 2, 3]
shuffle(foo) ## [2, 3, 1], foo = [1, 2, 3]

요약

이 챌린지에서는 Fisher-Yates 알고리즘을 사용하여 리스트 내 항목들을 섞는 함수를 작성했습니다. 이 알고리즘은 리스트 내 항목들의 순서를 무작위로 만드는 간단하고 효율적인 방법입니다. 이 챌린지를 완료함으로써 Python 에서 리스트가 어떻게 작동하는지, 그리고 함수를 사용하여 리스트를 어떻게 조작하는지에 대한 더 깊은 이해를 얻었습니다.