내 머리속 어딘가...

[파이썬] 복습 노트 - 5 | 컬렉션(collection)의 종류와 특징 본문

프로그래밍 공부/Python

[파이썬] 복습 노트 - 5 | 컬렉션(collection)의 종류와 특징

내 머리속 어딘가 2025. 1. 24. 17:57
반응형

1. 컬렉션(collection)이란

말 그대로 "여러개의 값(요소)들을 모아놓은 것" 이라고 보면 된다.

 

여기에서 요소는 문자형, 정수, 실수, 논리형(bool) 등이 있다.

 

 

 


2. 컬렉션의 종류

컬렉션은 보통 4가지로 설명을 하는데,

 

1. 리스트(List)

2. 튜플(Tuple)

3. 세트(Set)

4. 딕셔너리(Dict)

 

이 4가지의 컬렉션들에는 위에 말했듯이 어떠한 자료형이든 상관없이 들어갈 수 있다.

하지만 문자형만 들어갈 수 있는 컬렉션도 있다.

 

5. 문자열(String)

 

문자열 또한 다른 컬렉션들과 유사한 개념을 가지고 있지만

들어갈 수 있는 자료형이 문자형만 가능하다는 점만 다르다고 보면 된다.

 

문자열에 정수와 실수 등도 들어갈 수 있지 않나? 라고 생각할 수 있지만

문자열 안에 들어간 정수와 실수는 정수, 실수로 인식하지 않고, 모두 문자로 인식하게 된다.

덧셈 뺄셈 등이 불가능한 "문자"인 것이다.

 

 

 

 


3. 컬렉션별 특징

구분 표현방식 인덱스 번호 여부 중복값 허용 여부 빈 컬렉션 표현 요소가 1개인 컬렉션
리스트(list) [ ] O O []  or  list() [1]
☆튜플(tuple) ( ) O O ()  or  tuple() (1,)
세트(set) { } X X set()
({} -> 빈 딕셔너리)
{1}
딕셔너리(dict) { key : value } X (대신 key 사용) key 중복X
value 중복O
{}  or  dict() {1:2}
문자열(str) " "  O O "" "1"

 

컬렉션별 특징을 먼저 정리를 해보자면 이렇게 볼 수 있다.

이제 하나씩 더 자세히 확인해보겠다.

 

 


3 - 1. 리스트(list)

- 작성방식

대괄호[ ] 안에 요소들을 콤마(,)로 구분해서 넣으면 리스트로 인식한다.

 

li = [1, 2, 3, 4, 5]

print(li, type(li))

 

 

 

 

- 구성요소

리스트에는 모든 형태의 요소들이 들어갈 수 있다.

정수형, 실수형, 문자열, Boolean, 리스트, 튜플,.... 등

# ex)
li = [1, 2.34, "안녕", Ture, [1, 2, 3], (4, 5)]

 

 

 

- 인덱싱 & 슬라이싱

리스트는 인덱스번호를 사용할 수 있는 컬렉션이다.

이는 인덱싱(인덱스번호의 요소를 추출하는 것)

슬라이싱(a번에서 b번까지의 요소를 c간격마다 하나씩 추출)이 가능하다는 뜻이다.

li = [1, 2, 3, 4, 5]

li[1] 
# li라는 이름의 리스트의 인덱스번호 1번 요소
# => 2

li[1:4:2] 
# li라는 이름의 리스트의 인덱스번호 1번부터 시작해서 4번이 되기 전까지 2칸마다 하나씩 추출
# => [2, 4]

 

여기에서 주의할 것은 인덱싱을 해서 요소 하나를 뽑아오면 그건 하나의 요소로써 나오게 되고,

슬라이싱을 하면 리스트를 잘라온다 라는 개념이므로 리스트로 추출된다.

 

이런 인덱싱과 슬라이싱 방법을 통해 리스트의 요소를 수정할 수도 있다.

 

1. 한개의 요소 수정

- 리스트에서 수정할 요소를 인덱싱하여 수정

 

2. 여러개 요소 수정

- 리스트에서 수정할 요소들을 슬라이싱하여 수정한다.

위 내용은 "a 리스트에서 2이상 4미만인 요소를 ['a', True]로 수정하겠다"라는 뜻이다.

따라서 인덱스번호 2번인 요소 "3"부터 인덱스번호 3번인 요소 "4"까지가 지워지고,

['a', True]라는 값이 들어가게 되는 것이다.

 

이 외에도 del, append, sort, reverse, insert 등의 명령어를 통해 수정이 가능하다.

 

여기에서 주의할 점은

위에서도 인덱싱으로 요소를 수정할 때에 a[0] = 'a' 이렇게 char 타입의 "요소"를 넣었고,

슬라이싱은 a[ 2 : 4 ] = [ 'a', True ] 이와같이 "리스트"를 넣은 것을 볼 수 있는데,

이렇게 추출값이 요소인 것은 요소로 넣고, 추출값이 리스트인 것은 리스트로 넣는다.

 

만약

요소에 리스트를 넣는다면

결과가 이렇게 리스트 안에 리스트가 들어가는 이중 리스트의 형태로 만들어진다는 것을 알고 있어야 한다.

 

 

 


3 - 2. ☆튜플(tuple)

- 작성방식

소괄호( ) 안에 요소들을 콤마(,)로 구분해서 넣으면 튜플로 인식한다.

 

 

- 패킹

여기에서 튜플은 다른 컬렉션들과 다른 특징이 있는데,

소괄호를 작성하지 않고, 콤마(,)로만 넣어도 튜플로 만들어준다는 것이다.

이를 튜플의 "패킹" 이라고 한다.

 

- 언패킹

그리고 언패킹이라는 것이 있는데,

위 그림과 같이 튜플을 대입할때, 튜플의 요소의 개수와 좌측의 변수의 개수가 같을 경우

튜플이 언패킹되어 각각의 변수에 순서대로 값이 대입된다.

 

+) 요소가 하나인 튜플을 작성하기 위해서는 소괄호 안에 콤마(,)를 넣어야 한다. ex) (3,)

 

 

- 구성요소

튜플도 리스트와 마찬가지로 모든 형태의 요소들이 들어갈 수 있다.

정수형, 실수형, 문자열, Boolean, 리스트, 튜플,.... 등

 

 

 

- 인덱싱 & 슬라이싱

인덱싱과 슬라이싱도 리스트와 마찬가지로 작동한다.

하지만 인덱싱과 슬라이싱을 이용한 수정은 불가능하다.

 

변수(저장공간)에 튜플을 다시 넣는 것은 가능하지만,

만들어진 튜플의 요소를 수정, 추가, 삭제는 불가능하다는 말이다.

# ex)
tu = (1, 2, 3)
tu = (4, 5) # 변수에 새로운 튜플을 넣는것은 가능
tu = (1, 2, 3)
tu[1] = 1 # 이건 안된다!!

 

 

 


3 - 3. 세트(set)

세트(set)는 집합이라고도 한다.

집합이라고 하는게 개념을 이해하기는 더 쉬울 수 있다.

 

세트의 특징은 크게 두가지가 있다.

1. 순서가 없다.

위에 튜플과 리스트는 순서가 있는 요소의 배열이라고 볼 수 있는데,

세트는 수학에서 나오는 집합처럼 보면 된다.

 

2. 중복을 허용하지 않는다.

세트는 순서가 없기 때문에 동일한 값을 가지는 중복된 요소를 따로 인지하지 못한다

같은 것이라고 판단되면 중복된 요소를 지운다.

이 특성을 이용해서 다른 자료형에서 중복된 요소를 삭제해야할 때 세트로 형변환을 사용하기도 한다.

+) 이때 추가적으로 알아야 될 것이 있다.

논리형 자료 (True, False)의 경우 컴퓨터는 이를 1과 0으로 인식하기 때문에 set에서는 중복된 요소로 보고 중복값을 삭제한다.

이런 경우에는 1과 True 중에 먼저 작성된 것, 0과 False중에 먼저 작성된 것이 남는다.

 

- 작성방식

중괄호{ } 안에 요소들을 콤마(,)로 구분해서 넣으면 세트로 인식한다.

+) 빈 세트를 만들기 위해 중괄호만 만들면 딕셔너리로 인식한다.

반드시 set()함수를 사용해야 한다.

 

- 인덱싱 & 슬라이싱

순서가 없는 컬렉션이기 때문에 순서에 따라 추출하고 수정하는 인덱싱과 슬라이싱은 불가능하다.

 

 


3 - 4. 딕셔너리(dict)

- 작성방식

딕셔너리는 세트와 동일하게 중괄호를 사용해서 요소들을 묶어주는데, 차이점은 key값과 value값을 가진다는 것이다.

key와 value는 콜론으로 구분하고, 요소들은 콤마(,)로 구분한다.

# ex)
{key1 : value1, key2 : value2, key3 : value3,...}

 

말 그대로 사전과 비슷한 형식을 가지고 있다고 생각하면 된다.

영어로 "baseball"이라는 key는 한글로 "야구"라는 value를 가진다.

출처 : 점프투 파이썬 (위키독스)

그럼 이런 내용을 딕셔너리로 표현할 경우

di = { "baseball" : "야구", "soccer" : "축구",...}

이런식으로 표현이 가능하다고 보면 된다.

 

- 인덱싱 & 슬라이싱

딕셔너리 또한 인덱싱과 슬라이싱이 불가능하다.

하지만 세트와는 다르게 다른 방법으로 요소를 뽑아낼 수는 있다.

 

key 값을 활용해서 value를 찾아내는 것이다.

사전에서 검색하는 것과 같다.

 

위의 딕셔너리를 예로 보면 

di[0] # 이렇게 인덱싱은 불가능하지만,
di["baseball"] # 이와같이 key값을 검색해서 value를 찾아낼 수는 있다.

 

이렇게 key를 이용해서 value를 추출하는 방식이 마치 사전에서 baseball의 뜻을 찾아내는 것과 유사하다.

 

 


3 - 5. 문자열(str)

- 작성방식

문자열은 작은 따옴표(') 혹은 큰 따옴표(")로 감싸주면,

그 안에 있는 모든 요소들은 문자형으로 변환되어 저장된다.

 

따라서 문자열에서 숫자를 인덱싱해서 연산을 하려고 해도

생각한 방식대로 작동하지 않는다는 것이다.

ex)

 

위의 st라는 문자열에서 인덱스 번호 2인 요소는 1이다.

 

그리고 1 * 3의 결과를 출력하기를 기대하고 위와 같은식으로 코드를 작성하면 코드에서는 문자와 숫자의 곱으로 인식하고 숫자를 곱하는 것이 아니라, 문자를 반복하여 출력해준다.

 

그러니까 결과가 3이 아니라 111이 나오게 된 것이다.

그리고 이렇게 나온 111 또한 숫자가 아니고 문자열 자료이다.

 

 

 


[참고사이트]

- https://wikidocs.net/231442

- https://billnairk.tistory.com/100

- https://wikidocs.net/1015

- https://dojang.io/mod/page/view.php?id=2316

 

 

반응형