목차
- 리스트와 튜플의 사용 범위
- 튜플의 인덱싱과 슬라이싱, 더하기(+)와 곱하기(*)
- 딕셔너리 쌍 추가, 삭제
- 딕셔너리 사용 방법
- 딕셔러니 만들 때 주의사항
- 딕셔너리 관련 함수
- 집합 자료형 특징
- 집합 자료형 활용 방법
- 집합 자료형 관련 함수
튜플 (Tuple)
>>> t1 = ()
>>> t2 = (1,) <---- 1개의 요소만을 가질때는 요소 뒤에 콤마(,)가 꼭 필요
>>> t3 = (1, 2, 3)
>>> t4 = 1, 2, 3 <---- 괄호 생략 가능
>>> t5 = ('a', 'b', ('ab', 'cd'))
튜플(Tuple)은 리스트와 거의 비슷하지만 리스트는 대괄호[ ]로 둘러싸지만 튜플은 괄호( )로 둘러싼다. 그리고 리스트는 값을 생성, 삭제, 수정할 수 있지만 튜플은 값을 바꿀 수 없다.
1. 리스트와 튜플의 사용 범위
- 프로그램이 실행되는 동안 그 값이 항상 편하지 않기를 바라거나 바뀔까 걱정되면 튜플(Tuple)
- 수시로 그 값을 변화시켜야 할 경우는 리스트(List)
실제 프로그램에는 값이 변경되는 형태가 더 많기 때문에 튜플보다는 리스트를 더 많이 사용한다고 한다.
# 튜플 요소값 삭제 시 오류
>>> t1 = (1, 2, 'a', 'b')
>>> del t1[0] <---- 튜플 t1의 첫 번째 요소 삭제 시도
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object doesn't support item deletion
# 튜플 요소값 변경 시 오류
>>> t1 = (1, 2, 'a', 'b')
>>> t1[0] = 'c' <---- 튜플 t1의 첫 번째 요소 변경 시도
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
튜플의 요소 값을 삭제 또는 변경을 시도할 경우 위 소스코드들과 같은 오류가 발생한다.
2. 튜플의 인덱싱과 슬라이싱, 더하기 (+)와 곱하기(*)
튜플의 변화가 불가능 하지만 다른 부분 (인덱싱, 슬라이싱 등)은 리스트와 완전히 동일하다.
# 튜플 인덱싱
>>> t1 = (1, 2, 'a', 'b')
>>> t1[0]
1
# 튜플 슬라이싱
>>> t1 = (1, 2, 'a', 'b')
>>> t1[1:] <---- t1의 요소 중 두 번째 부터 끝까지
(2, 'a', 'b')
# 튜플 더하기
>>> t1 = (1, 2, 'a', 'b')
>>> t2 = (3, 4)
>>> t1 + t2 <---- (1, 2, 'a', 'b') + (3, 4)
(1, 2, 'a', 'b', 3, 4)
# 튜플 곱하기
>>> t2 = (3, 4)
>>> t2 * 3
(3, 4, 3, 4, 3, 4)
딕셔너리 (Dictionary)
딕셔너리는 Key와 Value의 한 쌍으로 이루어진 자료형이다. 예를 들면 "이름" = "홍길동"이 된다. 또한 딕셔너리는 리스트나 튜플처럼 순서대로 요소 값을 구하는 것이 아니라 Key를 통해 Value를 얻는다. 순차적으로 모두 검색하는 것이 아니라 "이름"이라는 단어가 있는 곳만 검색한다.
{Key1:Value2, Key2:Value2, Key3:Value3...}
딕셔너리는 Key와 Value의 쌍 여러 개가 중괄호{ }로 둘러싸여 있다. Key는 변하지 않는 값을 사용하고, Value는 변하는 값과 변하지 않는 값 모두를 사용할 수 있다.
>>> dic = {'name':'pey', 'phone':'01012341234', 'birth':'1007'}
>>> a = {1:'hi'} <---- Key에 정수값1, Value에 문자열'hi' 사용
>>> a = {'a':[1, 2, 3]} <---- Value에 리스트를 사용
위 소스코드는 딕셔너리의 기본 예와 몇가지 사용 방법을 보여준다. 이 딕셔너리 중 dic을 표로 풀어보면 아래와 같다.
Key | Value |
name | pey |
phone | 01012341234 |
birth | 1007 |
1. 딕셔너리 쌍 추가, 삭제
# 딕셔너리 쌍 추가
>>> a = {1:'a'}
>>> a[2] = 'b' <---- {2:'b'} 쌍 추가
>>> a
{1: 'a', 2: 'b'}
>>> a['name'] = 'pey' <---- {'name':'pey'} 쌍 추가
>>> a
{1: 'a', 2: 'b', 'name': 'pey'}
>>> a[3] = [1, 2, 3] <---- {3:[1, 2, 3]} 쌍 추가
>>> a
{1: 'a', 2: 'b', 'name': 'pey', 3: [1, 2, 3]}
# 딕셔너리 요소 삭제 (위에서 사용한 튜플 연결)
>>> del a[1] <---- Key값이 1인 Key:Value 삭제
>>> a
{2: 'b', 'name': 'pey', 3: [1, 2, 3]}
2. 딕셔너리 사용 방법
# 딕셔너리의 Key를 사용해 Value값 얻기
>>> grade = {'pey':10, 'juliet':99}
>>> grade['pey'] <---- Key가 'pey'인 Value 반환
10
>>> grade['juliet'] <---- Key가 'juliet'인 Value 반환
99
# 딕셔너리에서 [ ]안의 숫자는 두 번째 요소를 뜻하는 것이 아니다. Key에 해당하는 숫자를 나타낸다.
>>> a = {1:'a', 2:'b'}
>>> a[1] <---- Key가 1인 Value 반환
'a'
>>> a[2] <---- Key가 2인 Value 반환
'b'
>>> a = {'a':1, 'b':2}
>>> a['a']
1
>>> a['b']
2
리스트나 튜플 문자열은 요소값을 얻기 위해 인덱싱 또는 슬라이싱 기법을 사용했지만 딕셔너리는 인덱싱 기법을 사용할 수 없다.
Key를 사용해서 Value를 얻어내는 방법만 가능하다.
아래의 소스코드 예시를 보면 더 이해하기 쉽다.
>>> dic = {'name':'pey', 'phone':'01012341234', 'birth':'1007'}
>>> dic['name']
'pey'
>>> dic['phone']
'01012341234'
>>> dic['birth']
'1007'
3. 딕셔너리 만들때 주의사항
# Key값의 중복사용 금지
>>> a = {1:'a', 1:'b'} <---- Key값에 1이라는 중봅 값 사용
>>> a[1] <---- Key값이 1인 Value 반환
'b'
>>> a
{1: 'b'} <---- 1개를 제외한 나머지 값 모두 무시
# Key값에 리스트 사용 불가 (단, 튜플은 사용 가능)
>>> a = {[1, 2]:'hi'} <---- 리스트를 Key에 사용
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list' <---- 오류 발생
# Key값에 튜플 사용 테스트
>>> a = {(1, 2):'hi'} <---- 튜플을 Key에 사용
>>> a
{(1, 2): 'hi'}
딕셔너리 Key값에 튜플은 왜 사용이 가능할까? Key가 변하지 않는 값만 사용할 수 있기 때문에 수정할 수 없는 튜플은 사용할 수 있다. (Value에는 변하는 값이나 변하지 않는 값이나 상관없이 사용할 수 있다.)
4. 딕셔너리 관련 함수
딕셔너리 역시 자체적으로 가지고 있는 함수들이 있다.
>>> a = {'name':'pey', 'phone':'01012341234', 'birth':'1007'}
# Key 리스트 만들기 (keys)
>>> a.keys()
dict_keys(['name', 'phone', 'birth']) <---- dict_keys라는 객체를 리턴
# dict_keys를 리스트로 변환 (보너스)
>>> list(a.keys())
['name', 'phone', 'birth']
# Value 리스트 만들기 (values)
>>> a.values()
dict_values(['pey', '01012341234', '1007']) <---- 리스트로 변환은 dict_keys와 같은 방법으로 가능하다.
# Key, Value 쌍 얻기 (items)
>>> a.items()
dict_items([('name', 'pey'), ('phone', '01012341234'), ('birth', '1007')]) <---- 튜플로 묵은 값을 dict_items 객체로 리턴
# Key:Value 쌍 모두 삭제 (clear)
>>> a.clear()
>>> a
{} <---- 빈 튜플을 표현하는 것과 같이 딕셔너리가 비었다는 뜻
# Key로 Value 얻기 (get)
>>> a = {'name':'pey', 'phone':'01012341234', 'birth':'1007'}
>>> a.get('name')
'pey'
>>> a.get('phone')
'01012341234'
>>> a.get('nokey') <---- get사용해서 없는 Key값 반환 명령 시 None으로 리턴
>>> a['nokey'] <---- 일반적인 방법으로 없는 Key값 반환 명령 시 오류 발생
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'nokey'
# Key값이 없는 경우 정해 둔 디폴트값을 대신 가져오기
>>> a = {'name':'pey', 'phone':'01012341234', 'birth':'1007'}
>>> a.get('foo', 'bar') <---- get('key값', '디폴트값')
'bar' <---- 불러오고자 하는 Key값 'foo'가 없기 때문에 디폴트값 'bar' 리턴
# 해당 Key가 딕셔너리에 있는지 조사 (in)
>>> a = {'name':'pey', 'phone':'01012341234', 'birth':'1007'}
>>> 'name' in a
True <---- 딕셔너리에 존재하면 True
>>> 'mail' in a
False <---- 딕셔너리에 존재하지 않으면 False
집합
>>> s1 = set([1, 2, 3]) <---- set()에 리스트 입력
>>> s1
{1, 2, 3}
>>> s2 = set("Hello") <---- set()에 문자열 입력
>>> s2
{'l', 'e', 'H', 'o'}
1. 집합 자료형 특징
1. 집합 자료형은 중복을 허용하지 않는다.
- 위 소스코드를 보면 "Hello"의 집합에 2개가 있었던 'l' 문자가 하나만 있다.
2. 집합 자료형은 순서가 없다.
- set 자료형은 리스트나 튜플과 다르게 순서가 없기 때문에 인덱싱으로 값을 얻을 수 없다.
- 딕셔너리와 같이 순서가 없는 자료형이기 때문에 인덱싱을 지원하지 않는다.
>>> s1 = set([1, 2, 3])
>>> l1 = list(s1) <---- s1 집합 자료형을 리스트로 변환
>>> l1
[1, 2, 3]
>>> l1[0] <---- 리스트로 변환된 l1의 인덱싱
1
>>> t1 = tuple(s1) <---- s1 집합 자료형을 튜플로 변환
>>> t1
(1, 2, 3)
>>> t1[0] <---- 튜플로 변환된 t1의 인덱싱
1
set 자료형에 저장된 값을 인덱싱 하기 위해서는 위의 소스코드와 같이 리스트나 튜플로 변환한 후 할 수 있다.
2. 집합 자료형 활용 방법
set 자료형은 교집합, 합집합, 차집합을 구할 때 사용할 수 있다.
>>> s1 = set([1, 2, 3, 4, 5, 6])
>>> s2 = set([4, 5, 6, 7, 8, 9])
# 교집합 (&, intersection)
>>> s1 & s2 <---- 기호 '&'를 사용한 교집합
{4, 5, 6}
>>> s1.intersection(s2) <---- 함수 intersection을 사용한 교집합
{4, 5, 6}
# 합집합 (|, union)
>>> s1 | s2 <---- 기호 '|'를 사용한 합집합
{1, 2, 3, 4, 5, 6, 7, 8, 9}
>>> s1.union(s2) <---- 함수 union을 사용한 합집합
{1, 2, 3, 4, 5, 6, 7, 8, 9}
# 차집합 (-, difference)
>>> s1 - s2 <---- 기호 '-'를 사용한 차집합
{1, 2, 3}
>>> s1.difference(s2) <---- 함수 difference를 사용한 차집합
{1, 2, 3}
3. 집합 자료형 관련 함수
집합 자료형 역시 다른 자료형들과 같이 자체적으로 가지고 있는 함수들이 있다.
# 1개 값 추가 (add)
>>> s1 = set([1, 2, 3])
>>> s1.add(4) <---- 1개의 값만 추가할 경우 값 자체만 입력
>>> s1
{1, 2, 3, 4}
# 여러개 값 추가 (update)
>>> s1 = set([1, 2, 3])
>>> s1.update([4, 5, 6]) <---- 여러개의 값을 한번에 추가할 때
>>> s1
{1, 2, 3, 4, 5, 6}
# 특정 값 제거 (remove)
>>> s1 = set([1, 2, 3])
>>> s1.remove(2) <---- 제거하고자 하는 특정 값 입력
>>> s1
{1, 3}
내용 출처: 책 '점프 투 파이썬'의 내용
'Programing > Python' 카테고리의 다른 글
[Python 입문] 9. 파이썬 제어문 - for (0) | 2020.03.19 |
---|---|
[Python 입문] 8. 파이썬 제어문 - while (0) | 2020.03.17 |
[Python 입문] 7. 파이썬 제어문 - if (0) | 2020.03.17 |
[Python 입문] 6. 파이썬 자료형 - 참과 거짓, 변수 (0) | 2020.03.16 |
[Python 입문] 0. 비전공 초짜의 Python 시작하기 with 점프 투 파이썬 (1) | 2020.03.08 |