달나라 노트

Python Basic : collection (list, dictionary, tuple, set) 본문

Python/Python Basic

Python Basic : collection (list, dictionary, tuple, set)

CosmosProject 2021. 11. 2. 23:04
728x90
반응형

 

 

 

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로 변경할 수 있습니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형
Comments