Python 기초 - 4.셋, 튜플, 딕셔너리

2 분 소요

여러 데이터들의 모음을 프로그램에서 효율적으로 다루기 위해 사용하는 것들:

  • 리스트(list) [1,2,3]: 요소 변경 가능 → 가장 기본적이고 많이 사용됨
  • 셋(set) {1,2,3}: 집합. 요소 고정, 변경 불가.
  • 튜플(tuple) (1,2): 변경 불가. 함수반환값 (다른 언어들은 함수반환값을 하나밖에 못 가져오는 경우가 많은데, 파이썬은 튜플을 활용해서 여러 값들을 가져옴)
  • 딕셔너리(dictionary) {키:값, 키:값}

중요 포인트: 리스트의 메모리 부여, 참조값에 대한 컨셉 이해가 필요.

  • 리스트복사와 메모리
  • “딥카피” 개념

셋(set)

수학의 집합과 같은 개념

  • 요소의 중복이 허용되지 않는다

  • 요소의 순서가 없음 → 순서가 없기 때문에 인덱스도 없음 (s[0] 사용불가)

  • 요소 변경이 불가 (수정 불가, immutable)

  • 셋 자체는 변경 가능 (요소의 추가/삭제는 가능)

    ⇒ 셋 안에는 다른 타입의 요소들을 섞어서 넣을 수 있음. 그러나 요소변경이 가능한(mutable) 리스트는 요소로 가질 수 없음.

  • 중괄호를 사용하여 표현

s = {1, 2, 3, 4}
  • 셋 생성 & 요소 추가/삭제
#셋 생성
s = {1, 2, 3}
s = set()

- 딕셔너리도 중괄호를 사용하기 때문에 s = {}  사용하면 셋이 아니라 딕셔너리가 생성된다!

#요소 추가
s.add('bbb')    #add함수로는 한꺼번에 여러개 추가 불가

a = [5,6,7]
s.update(a)     #요소 여러개 추가 시에는 update 사용.

-  방식으로 하면 셋에 리스트가 들어가는게 아니라 리스트의 요소를 사용해서 셋을 구성함.  

#요소 삭제
s.remove('aaa')     #없는 요소 삭제시 에러
s.discard(1)   #없는 요소 삭제시 무시
x = s.pop()     #값을 맨 앞부터 추출하여 셋으로부터 삭제
s.clear() #모든 요소 삭제
  • 집합연산
s1 = {1,2,3}
s2 = {3,4,5}

#합집합(union), 결과:{1,2,3,4,5}
s3 = s1|s2
s4 = s1.union(s2)

#교집합(intersection), 결과:{3}
s3 = s1 & s2
s4 = s1.intersection(s2)

#차집합(difference), 결과: s3와 s5 = {1,2}, s4와 s6 = {4,5}
s3 = s1 - s2
s4 = s2 - s1

s5 = s1.difference(s2)
s6 = s2.difference(s1)

튜플(tuple)

  • 소괄호를 사용하거나 괄호를 사용하지 않고 데이터를 입력
  • 요소 변경안됨
    • 처음 생성할 때를 제외하고 튜플에 대해 대입연산자 사용 불가
    • 리스트와 같은 mutable 요소를 쓸 수 있기 때문에 우회적으로 변경가능)
  • 고정된 집합 데이터 저장
  • 여러개의 값을 한번에 초기화하는 작업에 많이 사용
  • 튜플은 인덱스 사용 가능 = 순서가 존재
  • 요소 수정 관련 사항 외에 사용방법은 리스트와 거의 동일
tuple1 = (1, 2, 3, 4)
tuple2 = 4, 5, 6, 7

#인자가 하나만 있는 튜플. 반드시 콤마를 뒤에 붙여줘야함
tuple3 = (a,)
tuple4 = b,

리스트, 튜플, 셋 타입 변환

세 자료형은 서로 형태의 유사성을 가지고 있어서 필요에 따라 list(), tuple(), set() 함수를 이용하여 타입을 변환하여 사용할 수 있다.

tuple1 = (1, 2, 3, 4)
a = list(tuple1)
print(a)  # 결과값: [1, 2, 3, 4] 

딕셔너리

  • 키(key)와 값(value)을 묶어서 저장이 이루어짐

    ⇒ 빠른 검색에 용이

  • 키는 중복허용안함, 값은 중복되어도 됨

  • 키의 타입은 변경불가한 값, 값의 타입은 제약 없음

  • 키를 사용하기 때문에 정해진 순서가 없으므로 인덱스 사용 불가

    • 대신 딕셔너리명[키이름] 형태로 값 호출가능
  • 요소 추가, 변경, 삭제 가능

dict1 = {'key1':'value1', 'key2':'value2', 'key3':'value3', ...
print(dict1[key1])  # 결과값: 'value1' 
  • 딕셔너리 메서드
    • keys() : 키 전체를 리스트로 반환
    • values() : 값 전체를 리스트로 반환
    • items() : 키:값 전체를 튜플형태(키, 값)로 담아 리스트로 반환

댓글남기기