Algorithm & Data Structure

for문 사용시에 list 자료형과, set 자료형의 차이

후뿡이 2022. 9. 17. 03:12

 

1) 문제점 발견

  • Python을 이용하여 카드게임 ( war game )을 만드는 과정에서 for 문을 이용해 card 객체를 만드는 과정에서 실행할 때마다 객체가 만들어지는 순서가 달라지는 현상을 발견했다.

 

2) Code ( 실제 코드 )

        suits = {'Hearts','Diamonds','Spades','Clubs'}
        ranks = {'Two','Three','Four','Five','Six','Seven','Eight','Nine','Ten','Jack','Queen','King','Ace'}

        for suit in suits:
            for rank in ranks:
                #Create Card Object
                created_card = Card(suit,rank)
                self.all_cards.append(created_card)
 
        #반복문을 통하여서 Card 객체를 생성한다. 
        #간단하게 진행하기 위해 아래와 같이 값을 변경하여 시뮬레이션을 진행하였다.
        suits = {'Hearts','Diamonds'}
        ranks = {'Two','Three','Four','Five'
 
 
3)반복문 실행 결과.
왼쪽과 오른쪽의 반복문 실행 결과가 다름을 알 수 있다.

 여러번 수행하면 변수 ranks 와 suits의 순서가 바뀌어 가면 for문에 대입 되고 있음을 알 수 있다.

 

4) 해결 방법

  • ranks와 suits의 자료형을 set이 아닌 list 자료형으로 변경하니 예상했던 대로 순차적으로 값이 대입 되었다.
  • 수정한 코드
    suits = ['Hearts','Diamonds']
    ranks = ['Two','Three','Four','Five']
  • 실행 결과

실험 결과 예상했던 대로 list 순서대로 for문에 대입 되는 것을 확인 할 수 있었다.

 

 

5) 결과

for loop를 사용할 때 자료형이 set인 경우 순처적으로 대입되는 것이 아니라 대입할 때마다 랜덤으로 대입되고

list 자료형을 사용하면 순차적으로 대입된다!!!

또한 이 set 자료형의 성분이 str인 경우에는 이런 일이 발생하지만 자료형이 int인 경우에는 이런 일이 발생하지 않는 다는 것을 확인했다.