[파이썬기초] 06. 자료형(2)

일리삼·2022년 6월 4일

파이썬

목록 보기
6/10

1. 딕셔너리(Dictionary)

  • 키(Key)와 값(Value)을 쌍으로 갖는 자료형이며, 키를 이용하여 값을 참조
  • 리스트가 '인덱스를 기반으로 값을 저장'하는 것이라면, 딕셔너리는 '키를 기반으로 값을 저장'하는 것

1.1 딕셔너리 생성

  • 딕셔너리의 항목은 [키]:[값] 형식과 같이 콜론으로 연결되어 정의
  • 항목이 하나 이상 모여서 딕셔너리 구성
>>>> person = {'이름':'홍길동', '나이':26, '몸무게':82}
>>>> person['이름']
'홍길동'
>>>> person['나이']
26
>>>> person['몸무게']
82

1.2 딕셔너리 수정

  • 딕셔너리에 새로운 항목을 삽입하려면 다음과 같은 방법 사용
    딕셔너리[새로운 키] = '새로운 값
  • 삭제 시 del 키워들 다음에 삭제할 딕셔너리 항목의 키를 입력
  • 존재하지 않는 키를 이용하여 항목을 삭제하려하면 KeyError라는 오류메시지가 출력됨
>>>> person['직업'] = '율도국의 왕'
>>>> person
{'이름':'홍길동', '나이':27, '몸무게':82, '직업':'율도국의 왕'}
>>>> del person['나이']
>>>> person
{'이름':'홍길동', '몸무게':82, '직업':'율도국의 왕'}

1.3 딕셔너리 함수, 메소드

1.3.1 함수와 연산

  • len(): 딕셔너리 내의 항목 수를 얻기 위해 사용
  • in, not in: 키와 값이 딕셔너리에 있는지 확인
  • ==, !=: 두 개의 딕셔너리가 동일한 항목을 가지고 있는지 확인
  • 딕셔너리에서는 >, >=, <, <=와 같은 비교연산을 지원하지 않음
>>>> d1 = {'이름':'홍길동', '나이':26}
>>>> d2 = {'나이':26, '이름':'홍길동'}
>>>> d1 == d2
True
>>>> d1 < d2
...
TypeError: '>' not supported between instances of 'dict' and e'dict'

1.3.2 메소드

  • keys(): 딕셔너리 내의 모든 키를 반환
  • values(): 딕셔너리 내의 모든 값을 반환
  • items(): 딕셔너리 내의 모든 항목을 [키]:[값] 쌍으로 반환
  • get(key): 키에 대한 값을 반환. 키가 없으면 None을 반환
  • pop(key): 키에 대한 값을 반환하고, 그 항목을 삭제. 키가 없으면 KeyError 예외 발생
  • popitem(): 랜덤하게 선택된 항목을 반환하고 그 항목을 삭제
  • clear() 딕셔너리 내외의 모은 항목을 학제함]

1.4 KeyError 예외

  • 리스트의 길이를 넘는 인덱스에 접근하면 IndexError가 발생했듯, 딕셔너리도 존재하지 않는 키에 접근 시 KeyError가 발생
  • 존재하는 키인지, 아닌지 여부를 in키워드나 딕셔너리의 get()함수를 사용하는 방법이 있음
    • get('키'): 딕셔너리 내부에 해당 키값이 있으면 딕셔너리[키]를 입력할 때와 동일한 기능을 하나, 존재하지 않을 경우 None출력

2. 튜플(Tuple)

  • 튜플은 몇 가지 점을 제외하곤 리스트와 거의 비슷하며 리스트와 다른 점은 다음과 같음
    • 리스트는 []으로 둘러싸지만, 튜플은 ()으로 둘러싼다
    • 리스트는 그 값의 생성, 수정, 삭제 가능하지만 튜플은 값을 바꿀 수 없음

2.1 튜플 생성

  • 빈 튜플 만들기: tup = ()
  • 하나의 요소를 가진 튜플 만들기: tup = (1, )
    • 반드시 쉼표를 사용해야 함에 유의
  • 기본적인 튜플 만들기: tup = (1, 2, 3, 4)
  • 간단한 방식의 튜플 만들기: tup = 1, 2, 3, 4
  • 리스트로부터 튜플 만들기
    lst = [1, 2, 3, 4]
    tup = tuple(lst)
>>>> t = (1, 2, 3, 4)
>>>> t[0]
1
>>>> t[1]
2
  • 튜플 내에 하나의 요소만을 갖는다고 tup = (100)과 같은 할당을 할 경우, tup = 100과 동일하게 취급되어 tup은 튜플이 아니라 정수가 됨
  • 따라서 tup을 튜플로 사용하고 싶다면 tup = (100, )과 같이 쉼표를 반드시 삽입
>>>> tup1 = (100)
>>>> tup1
100
>>>> type(tup1)
<class 'int'>
>>>> tup2 = (100, )
>>>> tup2
(100,)
>>>> type(tup2)
<class 'tuple'>

2.2 튜플 수정

  • 튜플은 리스트와 달리 내부의 값을 변경할 수 없으므로 개별 항목에 대한 할당 연산은 오류 발생
    • 이와 같은 속성을 교환불가능(immutable)속성이라 함
>>>> t = (0, 1, 2, 3, 4)
>>>> t[0] = 100 # 할당연산은 오류 발생
...
TypeERror: 'tuple' pbject does not support item assignment

2.2.1 패킹과 언패킹

  • 패킹(Packing): 하나의 변수에 여러 개의 값을 넣는 것을 의미
  • 언패킹(Unpacking): 패킹된 변수가 있으면, 여기에서 여러 개의 값을 꺼내옴

2.2.2 슬라이싱

  • 슬라이싱은 리스트나 튜플은 물론 문자열에 대해서도 적용 가능
>>>> tu = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
>>>> tu[1:5]
(1, 2, 3, 4)
>>>> tu[0:10:3]
(0, 3, 6, 9)
>>>> tu[::-1]
(9, 8, 7, 6, 5, 4, 3, 2, 1, 0)
>>>> txt = 'hello world'
>>>> txt[1:5]
'ello'
>>>> txt[6:]
'world'
>>>> txt[::-1]
'dlrow olleh'

3. 셋(Set)

  • 순서가 없는 자료형으로, 중복된 값을 허용하지 않음
  • 교집합, 차집합, 합집합 등의 집합 연산 수행이 가능

3.1 집합 만드는 방법

>>>> set0 = set() # 주의: set0 = {}와 같이 생성할 경우 dict형으로 생성됨
>>>> set1 = {1, 2, 3, 4}
>>>> day_list = ['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN']
>>>> day_set = set(day_list)
>>>> day_set
{'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN'}
>>>> fruits_tuple = ('apple', ' orange', 'water melon')
>>>> fruuts_set = set(fruits_tuple)
>>>> fruits_set
{'apple', ' orange', 'water melon'}
>>>> h_str = 'hello'
>>>> h_set = set(h_str)
>>>> h_set
{'h', 'l', 'e', 'o'}

3.2 집합의 메소드

  • add(x): 집합 내의 특정 원소 x를 추가
  • discard(x): 집합 내의 특정 원소 x를 삭제
  • clear(): 집합 내의 모든 원소 삭제
  • union(s): s집합과의 합집합을 구함. |연산과 동일
  • diffierence(s): s 집합과의 차집합을 구함. -연산과 동일
  • intersection(s): s 집합과의 교집합을 구함. &
  • symmetric_differences(s): s 집합과의 대칭차집합을 구함. ^연산과 동일
  • issubset(s): s 집합의 부분집합인가를 구하며, True/False를 반환
  • issuperset(s): s 집합의 상위 집합인가를 구하며, True/False를 반환
  • isdisjoint(s): s 집합과 서로소인가를 구하며, True/False를 반환
profile
코린이의 취준 자취 기록장

0개의 댓글