일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- c#
- math
- Java
- Kotlin
- hive
- list
- Google Excel
- PostgreSQL
- dataframe
- PANDAS
- django
- GIT
- Mac
- Excel
- numpy
- 파이썬
- google apps script
- gas
- array
- Redshift
- matplotlib
- Python
- Google Spreadsheet
- SQL
- Apache
- Github
- Tkinter
- PySpark
- string
- Today
- Total
달나라 노트
Python Basic : collection (list, dictionary, tuple, set) 본문
Python Basic : collection (list, dictionary, tuple, set)
CosmosProject 2021. 11. 2. 23:04
Python에서는 변수에 숫자나 글자같은 단순한 값 뿐 아니라 여러 값들을 묶어놓은 묶음(collection)을 할당할 수 있습니다.
Python에 있는 묶음 데이터(collection)들은 어떤 것이 있으며 각각의 특성이 무엇인지 알아봅시다.
1. list
temp_list = [1, 1, 2, 'a', 'bb', '1a2b3c']
temp_list_2 = ['apple']
가장 먼저 list입니다.
가장 많이 쓰이는 형태입니다.
list는 위처럼 대괄호[]로 묶어서 변수에 할당할 수 있습니다.
대괄호 안에는 각각의 요소들이 콤마의 형태로 구분지어져 있습니다.
(요소란 collection 안에 있는 하나하나의 구성품들을 의미합니다.)
temp_list_2에서 보이는 것 처럼 list 속 요소는 1개일수도 여러개일 수도 있습니다.
temp_list = [1, 1, 2, 'a', 'bb', '1a2b3c']
print(temp_list[0])
print(temp_list[1])
print(temp_list[2])
print(temp_list[3])
print(temp_list[4])
print(temp_list[5])
-- Result
1
1
2
a
bb
1a2b3c
list의 각 요소는 자동적으로 위치정보를 가진 번호(index)를 가집니다.
가장 왼쪽에 있는 첫 번째 요소는 index=0이며 그 후로 1씩 늘어납니다.
위처럼 temp_list에 있는 각각의 요소에 접근할 땐 index를 이용할 수 있으며 이런걸 indexing이라고 합니다.
temp_list_1 = [1, 1, 2, 'a', 'bb', '1a2b3c']
temp_list_2 = [1, 2, 1, 'a', 'bb', '1a2b3c']
print(temp_list_1 == temp_list_2)
-- Result
False
중복값도 존재할 수 있습니다.
또한 순서도 존재합니다. 즉, 정렬을 할 수 있습니다.
위 예시를 보면 temp_list_1, temp_list_2가 단순히 중간에 있는 1과 2의 순서만 다르죠?
근데 두 list를 등호(==)로 비교해봤더니 False가 나옵니다.
즉, list속 요소의 종류가 동일해도 순서가 다르면 다른 list입니다. -> 이게 순서가 존재한다는 의미이죠.
temp_list = [1, 1, 2, 'a', 'bb', '1a2b3c']
temp_list[1] = 'c'
print(temp_list)
-- Result
[1, 'c', 2, 'a', 'bb', '1a2b3c']
또한 위처럼 indexing을 이용해서 index=1에 있는 위치의 값을 c로 바꾸는 등 indexing을 이용해서 list 속 요소의 값을 바꿀 수 있습니다.
2. dictionary
temp_dict = {1: 'a', 2: 'b', 3: 'c', 'z': 123, 'apple': '사과'}
다음은 dictionary입니다.
dictionary는 위처럼 중괄호{}로 감싸서 생성할 수 있습니다.
한가지 특이한건 내부의 요소들이 콜론(:)을 기준으로 쌍을 이루고있습니다.
그리고 각각의 쌍은 콤마로 구분되어있죠.
temp_dict = {
1: 'a',
2: 'b',
3: 'c',
'z': 123,
'apple': '사과'
}
위 dictionary를 줄바꿈을 이용해 좀 더 가독성있게 쓰면 위와 같습니다.
dictionary에서 콜론(:) 왼쪽에 있는 값을 key, 콜론(:) 오른쪽에 있는 값을 value라고 합니다.
즉, dictionary는 key와 value의 쌍(pair)을 선언해주는 것입니다.
temp_dict = {
1: 'a',
2: 'b',
3: 'c',
'z': 123,
'apple': '사과'
}
print(temp_dict[1])
print(temp_dict[2])
print(temp_dict[3])
print(temp_dict['z'])
print(temp_dict['apple'])
-- Result
a
b
c
123
사과
dictionary에 있는 요소로의 접근은 위처럼 key를 이용할 수 있습니다.
list는 index를 이용했던 것과는 좀 다르죠.
temp_dict = {
1: 'a',
2: 'b',
3: 'c',
'z': 123,
'apple': '사과'
}
temp_dict['z'] = '파인애플'
print(temp_dict)
-- Result
{1: 'a', 2: 'b', 3: 'c', 'z': '파인애플', 'apple': '사과'}
dictionary에서는 key를 이용해서 위처럼 key = 'z'인 쌍의 value값을 바꿀 수 있습니다.
3. set
temp_set = {5, 4, 3, 'a', 'b'}
이번엔 set입니다.
set은 위처럼 중괄호{}를 이용하여 선언합니다.
dictionary처럼 중괄호를 이용하지만 dictionary와 다른 점은 key, value의 쌍을 중괄호에 넣어준 dictionary와는 달리 단순히 값들만을 중괄호{}안에 넣어줍니다.
set은 쉽게 말하면 수학시간에 배운 집합을 생각하면 됩니다.
set에 적용가능한 여러 method들을 나중에 보다보면 set의 성질에는 합집합, 교집합 등의 개념이 적용됩니다.
temp_set_1 = {5, 4, 3, 'a', 'b'}
temp_set_2 = {5, 3, 4, 'a', 'b'}
print(temp_set_1 == temp_set_2)
-- Result
True
set은 집합이기때문에 순서가 없습니다.
그래서 위 예시를 보면 set_1과 set_2에 있는 요소의 종류가 동일하지만 중간에 3과 4의 순서가 다릅니다.
하지만 두 set을 등호(==)로 비교해봤더니 True가 나옵니다.
즉, 순서 상관없이 요소의 종류만 신경쓰는 집합같은 성질을 가지고있는 것이 set이라고 보면 됩니다.
temp_set = {5, 4, 3, 'a', 'b'}
print(temp_set[0])
print(temp_set[1])
print(temp_set[2])
print(temp_set[3])
print(temp_set[4])
-- Result
TypeError: 'set' object is not subscriptable
set은 순서가 없기 때문에 위처럼 indexing을 시도할 경우 에러가 발생합니다.
set은 순서가 없기 때문에 indexing을 할 수 없습니다.
temp_set = {5, 4, 3, 'a', 'b'}
temp_list = list(temp_set)
print(temp_list)
-- Result
[3, 4, 5, 'a', 'b']
위처럼 list method를 이용해서 set을 list로 바꿀 수 있습니다.
참고로 set은 순서가 없는데 list는 순서가 있으므로 위 코드를 실행할 때 마다 결과로 나오는 temp_list의 요소들 순서가 달라집니다.
4. tuple
temp_tuple = (1, 2, 'a', 'b')
temp_tuple_2 = ('a',)
마지막으로 tuple입니다.
tuple은 위처럼 괄호()를 이용하여 선언할 수 있습니다.
list랑 굉장히 비슷하죠.
근데 한가지 이상합니다.
왜 temp_tuple_2는 요소가 1개인 tuple을 선언하는데 'a'뒤에 콤마를 붙여줬을까요?
이건 tuple의 특성인데 요소가 1개인 tuple을 선언할때에는 반드시 그 요소 뒤에 콤마를 적어줘야합니다.
이것이 list랑 다른 점입니다.
temp_tuple = (1, 2, 'a', 'b')
print(type(temp_tuple))
temp_tuple_2 = ('a',)
print(type(temp_tuple_2))
temp_tuple_3 = ('a')
print(type(temp_tuple_3))
-- Result
<class 'tuple'>
<class 'tuple'>
<class 'str'>
만약 요소 1개짜리 tuple 선언 시 가장 뒤에 콤마를 붙이지 않으면
temp_tuple_3에서 보는 것 처럼 tuple이 아닌 그냥 string으로 만들어집니다.
temp_tuple_1 = (2, 1, 'a', 'b')
temp_tuple_2 = (1, 2, 'a', 'b')
print(temp_tuple_1 == temp_tuple_2)
temp_tuple = (1, 2, 'a', 'b')
print(temp_tuple[0])
print(temp_tuple[1])
print(temp_tuple[2])
print(temp_tuple[3])
-- Result
False
1
2
a
b
tuple도 순서가 존재하는 collection입니다.
따라서 tuple 속 요소의 종류가 동일해도 요소들의 순서가 다르면 다른 tuple입니다.
또한 순서가 있기에 indexing도 가능합니다.
temp_tuple = (1, 2, 'a', 'b')
temp_tuple[1] = 1
-- Result
TypeError: 'tuple' object does not support item assignment
tuple의 특성 중 하나는 위처럼 한 번 선언된 tuple은 속의 요소들을 변경할 수 없습니다.
위처럼 indexing을 이용해 tuple속 요소의 값을 변경하려고하면 Error가 발생합니다.
temp_tuple = (1, 2, 'a', 'b')
temp_list = list(temp_tuple)
print(temp_list)
-- Result
[1, 2, 'a', 'b']
set처럼 tuple도 list method를 이용해 list로 변경할 수 있습니다.