컬렉션이란
파이썬은 자료구조를 ‘Collection’이라는 이름으로 제공하는데요, 변수를 하나씩 처리하는 것보다 여러 개의 자료를 한번에 처리하기 위해 사용합니다.
아래 내용은 오늘 포스팅에서 정리할 자료구조들의 특징을 한눈에 요약한 것입니다.
- 시퀀스(Sequense):
순서
를 가지는 자료구조.- 리스트, 튜플, 문자열, range() 객체
- list는 순서가 있고 요소를 변경할 수 있고 요소를 [ ] 안에 나열한다.
- Tuple은 순서는 있지만 요소를 변경할 수 없고 요소를 ( ) 안에 나열한다.
- 매핑(Mapping): 자료마다
key 값
이 부여되는 자료구조.- 딕셔너리 - 요소를 { } 안에 나열한다.
- 자료에 순서가 없고 인덱스 값이 있다.
- **중복값을 허용한다.**
- 집합: 여러 개의 자료들을 나열할 수 있는 순서는 따지지 않는 자료구조.
- 세트(set) - 요소를 { }안에 나열한다.
- 자료에 순서가 없고 인덱스 값도 없다.
- **중복값을 허용하지 않는다.**
파이썬이 제공하는 내장시퀀스의 종류
문자열 str, 리스트 list, 튜플 tuple, 반복문에 사용되는 range, 바이트를 처리하는 자료형인 bytes, bytearray
‘튜플’이란
요소가 변경될 수 없는 리스트이며 ()
로 요소들을 나열합니다. 여러 개의 자료형을 섞어서 만드는 것도 가능하지만 요소를 변경하고자 하면 TypeError가 발생하기에 주의해야 합니다.
colors = ("red", "green", "blue")
colors[0] = "pink" #TypeError: 'tuple' object does not support item assignment
리스트와 마찬가지로 len(), +, *, in, not in 연산 사용이 가능하며, 사용할 수 있는 함수로는
- cmp(tuple1, tuple2) : 두 개의 튜플 비교연산
- tuple(리스트) : 리스트를 튜플로 변환. 반대로 list(튜플)를 쓰면 튜플을 리스트로 변환하는 것도 가능하다!
‘세트’란
순서 없이 중복값 없이 항목들이 모인 자료구조로 {}
로 나열합니다.
세트 또한 len(), in, not in 등의 연산이 가능하며 서로 다른 자료형들을 하나의 set에 포함시킬 수 있습니다.
그리고 순서가 없기에 인덱스 번호 또한 없다는 것! numbers[0]와 같은 인덱싱 방식의 접근이 불가능하답니다.
사용할 수 있는 함수들
- .add(요소) : 요소 추가
- .update(리스트) : 중복된 요소를 제외한 요소들만 추가 된다.
- .discard(요소) : 해당 요소 삭제, set에 해당 요소가 없으면 넘어감
- .remove(요소) : 해당 요소 삭제, set에 해당 요소가 없으면 에러 출력
- .clear() : 모든 요소 삭제
- .pop() : 임의의 요소 삭제 및 반환. 단, 빈 세트에서 하려고 하면 에러 출력
set의 부분집합연산 및 집합연산
- == 또는 != : 두 집합이 갖고 있는 원소가 같은지 비교한다.
- b < a: b가 a의 진부분집합인지 비교, 등호가 있으면 부분집합인지도 함께 비교한다.
- b.issubset(a): b가 a의 부분집합인가. 이것은
b <= a
와도 같은 의미이다. -
a.issuperset(b) : a가 b의 상위집합이냐, 이것은
a >= b
와 같은 의미이다. -
a b : a와 b의 합집합을 반환. a.union(b)
와 같다. - a & b : a와 b의 교집합을 반환.
a.intersection(b)
와 같다. - a - b : a와 b의 차집합을 반환.
a.difference(b)
와 같다.
‘딕셔너리’란
키(key)와 값(value)을 쌍으로 저장할 수 있는 자료구조로 {}
로 나열합니다.
하나의 키는 하나의 값만 나타내야 하고 키값은 인덱스로 사용될 수 있습니다. 키 값은 변하지 않는 값이어야 합니다. 따라서 list는 키가 될 수 없지만, 튜플은 키가 될 수 있습니다.
value값에는 list, tuple을 비롯한 다양한 자료형들이 들어갈 수 있습니다.
딕셔너리에서 각 항목에 접근할 때는 키값, 또는 get()을 사용합니다. 해당 키값과 연결된 value를 찾아줍니다.
contacts = {'Kim':'01012345678', 'Park':'01012345679', 'Lee':'01012345680'}
contacts['Kim'] #'01012345678'
contacts.get('Kim') #'01012345678'