시퀀스, 집합형 자료구조

분류 타입 특징 예시
시퀀스(sequence) 리스트(list) 순서가 있고, 가변(mutable) [1, 2, 3]
시퀀스(sequence) 튜플(tuple) 순서가 있고, 불변(immutable) (1, 2, 3)
세트(set) 세트(set) 순서가 없고, 중복을 허용하지 않음 {1, 2, 3}
맵(map) 딕셔너리(dictionary) 순서가 없고, key/value 쌍으로 이루어짐 {‘a’: 1, ‘b’: 2, ‘c’: 3}

세트(set)

  • 세트는 순서가 보장 되지 않습니다.
  • 세트는 요소의 중복을 허용하지 않습니다.
  • 세트는 {}를 활용하여 생성할 수 있습니다.

생성

myset = set()
myset
set()
myset = set([1, 1, 1, 2, 2, 2, 3, 3, 3])
myset
{1, 2, 3}
myset = set((1, 1, 1, 2, 3, 3, 4, 5, 5, 5))
myset
{1, 2, 3, 4, 5}
myset = {1, 1, 1, 2, 2, 2, 3, 3, 3}
myset
{1, 2, 3}

add() : 값 추가

  • set에 요소를 추가합니다.

빈 set를 생성합니다.

myset = set()

add() 로 요소를 추가합니다.

myset.add(1)
myset.add(2)
myset.add(3)

myset.add(1)
myset.add(2)
myset.add(3)

myset.add(1)
myset.add(2)
myset.add(3)

요소를 중복하여 추가하였지만, 중복을 허용하지 않는 set의 특성상 {1, 2, 3} 으로 중복이 제거된 요소만 출력됩니다.

myset
{1, 2, 3}

update() : 여러개 값 추가

  • 여러개의 값을 한꺼번에 추가하고자 할 때는 update() 메서드를 사용합니다.
myset = {1, 2, 3}

list의 요소들을 한꺼번에 update

myset.update([4, 5, 6])
myset
{1, 2, 3, 4, 5, 6}

tuple의 요소들을 한꺼번에 update

myset.update((7, 8, 9))
myset
{1, 2, 3, 4, 5, 6, 7, 8, 9}

set의 요소들을 한꺼번에 update

myset.update({10, 11, 12})
myset
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}

remove() : 값 제거

  • 단일 요소를 제거합니다.
myset = {1, 2, 3, 4, 5}
myset.remove(2)
myset
{1, 3, 4, 5}

교집합 (intersection)

  • 교집합은 집합 A와 B가 주어졌을 때 공통된 요소를 말합니다.
  • & 기호나 intersection() 메서드를 활용하여 교집합을 구할 수 있습니다.
a = {1, 2, 3, 4, 5}
b = {3, 4, 5, 6, 7}
a & b
{3, 4, 5}
a.intersection(b)
{3, 4, 5}

합집합 (union)

  • 합집합은 집합 A와 B가 주어졌을 때 집합 A, B 요소 모두를 포함하는 것을 말합니다.
  • |기호나 union() 메서드를 활용하여 합집합을 구할 수 있습니다.
a = {1, 2, 3, 4, 5}
b = {3, 4, 5, 6, 7}
a | b
{1, 2, 3, 4, 5, 6, 7}
a.union(b)
{1, 2, 3, 4, 5, 6, 7}

차집합 (difference)

  • 두 집합에서, 하나의 집합에 포함되고 다른 집합에는 포함되지 않는 모든 원소의 집합.
  • -연산자를 활용하거나 difference() 메서드를 활용하여 구할 수 있습니다.
a = {1, 2, 3, 4, 5}
b = {3, 4, 5, 6, 7}

a 집합에서 b 집합을 뺀 차집합

a - b
{1, 2}
a.difference(b)
{1, 2}

b 집합에서 a 집합을 뺀 차집합

b - a
{6, 7}
b.difference(a)
{6, 7}

집합의 타입 변환

set를 list로 변환

a = {1, 2, 3, 4, 5}
type(a)
set
b = list(a)
b
[1, 2, 3, 4, 5]
type(b)
list

list를 set로 변환

  • 중복을 제거할 때 많이 활용합니다.
a = [1, 1, 1, 2, 2, 2, 3, 3, 3]
a
[1, 1, 1, 2, 2, 2, 3, 3, 3]
type(a)
list
b = set(a)
b
{1, 2, 3}
type(b)
set

b를 다시 list 자료형으로 변환

b = list(b)
b
[1, 2, 3]

딕셔너리(dictionary)

  • 순서를 가지지 않습니다.
  • 키(key)와 값(value)의 쌍으로 이루어져 있습니다.
  • type은 dict로 표시 됩니다.
  • key를 사용하여 값을 조회할 수 있습니다.
  • 딕셔너리는 수정, 삭제, 추가가 가능합니다.

생성

mydict = dict()
print(type(mydict))
mydict
<class 'dict'>
{}
mydict = {'a': 1, 'b': 2, 'c': 3}
print(type(mydict))
mydict
<class 'dict'>
{'a': 1, 'b': 2, 'c': 3}

딕셔너리는 여러 타입의 key를 가질 수 있습니다.

mydict = {'a': 1, '가':2, 100: 3, 3.14: 4, True: 5}
mydict
{'a': 1, '가': 2, 100: 3, 3.14: 4, True: 5}

값 조회

  • key 값으로 값을 조회할 수 있습니다.
mydict = {'a': 1, '가':2, 100: 3, 3.14: 4, True: 5}
mydict
{'a': 1, '가': 2, 100: 3, 3.14: 4, True: 5}

key를 지정하여 값을 조회할 수 있습니다.

mydict['a']
1

key가 없는 경우 Error가 발생합니다.

mydict['b']
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-50-a8dfdc4bddd9> in <module>
----> 1 mydict['b']

KeyError: 'b'

get() 메서드를 활용하여 값을 조회할 수 있습니다.

mydict.get('a')
1

get()을 사용하면 key가 없는 경우라도 Error가 발생하지 않습니다. 단지 None이 반환됩니다.

mydict.get('b')

keys() : 모든 key 조회

mydict = {'a': 100, 'b': 200, 'c': 300, 'd': 400, 'e': 500}
mydict
{'a': 100, 'b': 200, 'c': 300, 'd': 400, 'e': 500}
mydict.keys()
dict_keys(['a', 'b', 'c', 'd', 'e'])

[참고] dict_keys

  • dict_keys는 리스트(list)가 아닙니다.
  • 객체(object)로 생성되는데, 이를 list로 변경하기 위해서는 list()로 타입 변환을 하면 됩니다.
list(mydict.keys())
['a', 'b', 'c', 'd', 'e']

values() : 모든 value 조회

mydict.values()
dict_values([100, 200, 300, 400, 500])

items() : 모든 key, value 조회

  • key, value가 튜플로 묶여서 조회됩니다.
mydict.items()
dict_items([('a', 100), ('b', 200), ('c', 300), ('d', 400), ('e', 500)])
list(mydict.items())
[('a', 100), ('b', 200), ('c', 300), ('d', 400), ('e', 500)]

key 값의 존재 유무 확인

'a' in mydict
True
'f' in mydict
False

값을 추가하기

  • 새로운 key에 값을 대입하여 추가
mydict = dict()
mydict
{}
mydict['apple'] = 123
mydict['apple']
123
mydict[0] = 2
mydict[0]
2

update() : 다중 업데이트

  • 값을 한꺼번에 업데이트 합니다.
mydict = {'파인애플': 1500, '망고': 3500, '배': 1000}
mydict
{'파인애플': 1500, '망고': 3500, '배': 1000}
fruit = {
    '사과': 2000, 
    '딸기': 3000, 
    '수박': 5000, 
}
mydict.update(fruit)
mydict
{'파인애플': 1500, '망고': 3500, '배': 1000, '사과': 2000, '딸기': 3000, '수박': 5000}

값 변경

  • key 값에 새로운 값(value)를 대입하여 값을 변경할 수 있습니다.
mydict = {'a': 100, 'b': 200, 'c': 300, 'd': 400, 'e': 500}
mydict
{'a': 100, 'b': 200, 'c': 300, 'd': 400, 'e': 500}
mydict['a'] = 900
mydict
{'a': 900, 'b': 200, 'c': 300, 'd': 400, 'e': 500}

제거하기 / key 제거

mydict = {'a': 100, 'b': 200, 'c': 300, 'd': 400, 'e': 500}
mydict
{'a': 100, 'b': 200, 'c': 300, 'd': 400, 'e': 500}

del 값을 제거할 수 있습니다.

del에 딕셔너리 key를 지정합니다.

del mydict['a']
mydict
{'b': 200, 'c': 300, 'd': 400, 'e': 500}

pop() 에 key를 지정하여 값을 제거할 수 있습니다.

제거되는 값의 value를 반환합니다.

mydict.pop('b')
200
mydict
{'c': 300, 'd': 400, 'e': 500}

len() : 요소의 개수 파악

len(mydict)
3

clear() - 전부 삭제

mydict = {'a': 100, 'b': 200, 'c': 300, 'd': 400, 'e': 500}
mydict
{'a': 100, 'b': 200, 'c': 300, 'd': 400, 'e': 500}
mydict.clear()
mydict
{}