오늘은 파이썬으로 Shuffle을 구현해볼 것이다.
여기에 사용되는 모듈은 random 모듈이다.
자, 우선 가장 기본적인 방법을 생각해보자.
1부터 5까지의 수가 있다고 할 때
5개의 난수 set를 생성해서 정렬을 해준다.
그럼 난수 배열에 맞는 새로운 1부터 5까지의 정수 배열이 탄생할 것이다.
아래는 그걸 코드로 구현해본 것이다.
#리스트 Shuffle하기 : 기본
import random
import math
card = [1,2,3,4,5]
tmp = []
for x in card:
tmp = tmp + [[random.random(), x]]
tmp.sort()
shuffleCard = []
for y in tmp:
shuffleCard = shuffleCard + [y[1]]
print(shuffleCard)
자, 여기서 한 단계 더 나아가보자.
1~5까지의 고정 리스트가 아니라
리스트까지 랜덤하게 생성하고 싶다면?
아래와 같이 코드를 변경해주면 된다.
randint라는 수를 생성해서 1부터 임의의 정수까지 숫자를 리스트화 시켰다.
#리스트 Shuffle하기 : 리스트 길이까지 랜덤으로 생성 import random import math rand = random.randint(5,10) card = [] for i in range(rand): i += 1 card = card + [i] print(card) tmp = [] for x in card: tmp = tmp + [[random.random(), x]] tmp.sort() shuffleCard = [] for y in tmp: shuffleCard = shuffleCard + [y[1]] print(shuffleCard)
여기까지 이해했다면
파이썬으로 Shuffle하는 방법은 무궁무진 하다는걸 느낄 것이다.
위에서는 그냥 한가지의 방법만 사용한 것이다.
그래서 한가지를 더 생각해봤다.
버블소팅에 착안해서..
임의의 두 장의 카드를 뽑아서 뒤집은다.
그리고 그러한 과정을 수십, 수백, 수천번 반복시킨다.
그럼 이 결과 또한 제대로 섞인 결과가 나오지 않겠는가?
한번 코드로 구현해봤다.
아래는 위 알고리즘으로 189,042번 카드를 뒤집은 것이고
그 결과 [3,1,2,4,5]라는 멋진 결과가 도출되었다.
제대로 섞인 것이다
#리스트 Shuffle하기 : 조금 더 재밌는 방법으로
import random
import math
card = [1,2,3,4,5]
lenCard = len(card)
cntShuffle = random.randint(100000,200000)
print(cntShuffle) #검증용
tmp = []
for x in range(cntShuffle):
#i와 j에 난수 배정하기
i = random.randint(0,lenCard-1)
j = random.randint(0,lenCard-1)
#print(i,j) #검증용
#card[i]와 card[j] swap
tmp = card[i]
card[i] = card[j]
card[j] = tmp
print(card)
댓글 없음:
댓글 쓰기