파이썬에서는 숫자나 문자를 담을 수 있는 자료구조가 4가지가 있다. 바로 리스트(list), 튜플(tuple), 사전(dictionary), 집합(set)이다.



1. 리스트(list)

   - 값을 순서대로 저장하는 구조이다.

   - 생성 후 수정과 삭제가 자유롭다.


2. 튜플(tuple)

   - 리스트와 같이 값을 순서대로 저장하는 자료구조이지만, 수정과 삭제를 할 수 없다.

   - 수정이 필요없거너 수정해서는 안되는 자료를 담기에 적합하다. (예 : 위치정보 좌표 등)


3. 사전(dictionary)

   - Key와 그에 대응하는 Value를 짝지어 놓은 자료 구조이다.

   - 사전에서 "사과"를 찾으면 "apple"이 나오는 방식이다.


4. 집합(set)

   - 수학에서 사용하는 집합과 같은 개념이다.

   - 자료 구조 중에서 유일하게 값들을 모아둘 수 있는 구조이다.

   - 반복값을 허용하지 않으며, 순서 또한 보존하지 않는다.




이제 각 자료구조에 대해 자세히 알아보자



리스트(list)


1. 만드는법

대괄호로 만들기

>>> a = [1,2,3]

>>> print(a)

[1, 2, 3]


list 함수로 만들기

>>> b = list('abc')

>>> print(b)

['a', 'b', 'c']



2. 리스트 인덱싱(indexing)과 슬라이싱(slicing)

   : 인덱싱과 슬라이싱은 앞서 살펴본 포스팅에서 확인할 수 있다("파이썬 - 자료형" 보러가기)

슬라이싱에 간격을 적용할 수 있다 [시작인덱스 : 끝인덱스 : 간격]

>>> c = [1,2,3,4,5,6,7]

>>> c[::2] ##처음부터 끝까지 2간격으로 선택

[1, 3, 5, 7]


>>> c[1:6:3]  ##1번 값부터 6번값 사이에 3간격으로 선택

[2, 5]



3. 리스트 길이 확인

len 함수를 활용하여 리스트 안에 몇 개의 값이 있는지 확인 할 수 있음

>>> c = [1,2,3,4,5,6,7]

>>> len(c)

7



4. 리스트 수정, 정렬, 확인하기

데이터 추가하기


>>> 과일 = ['사과', '배', '포도', '복숭아', '귤']

>>> 과일.append('딸기')

>>> print(과일)

['사과', '배', '포도', '복숭아', '귤', '딸기']  ## 가장 끝에 "딸기"가 추가됨


★원하는 위치에 데이터 추가하기


>>> 과일.insert(1, '참외')

['사과', '참외', '배', '포도', '복숭아', '귤', '딸기']  ## 1번째 위치(사과 다음)에 "참외"가 추가됨


데이터 삭제하기


>>> 과일 = ['사과', '참외', '배', '포도', '복숭아', '귤', '배', '딸기']

>>> 과일.pop(5)  ## pop은 지정된 값을 호출하고 삭제함, 

                        ## 값을 지정하지 않으면 (-1)로 자동 지정되어 가장 마지막 값을 호출하고 삭제함

'귤'

>>> print(과일)

['사과', '참외', '배', '포도', '복숭아', '배', '딸기'] ## '귤'이 삭제 됨


>>> 과일.remove('배') ## remove는 가장 앞에 있는 값을 삭제함

>>> print(과일)

['사과', '참외', '포도', '복숭아', '귤', '배'] ## 2개의 '배' 중 가장 앞에 있는 것이 삭제됨


데이터 삭제하기


>>> 과일 = ['사과', '참외', '배', '포도', '복숭아', '귤', '배', '딸기']

>>> del 과일[1:3]  ## 인덱싱과 슬라이싱으로 원하는 데이터 삭제

>>> print(과일)

['사과', '포도', '복숭아', '귤', '배', '딸기']


데이터 찾아서 바꾸기


>>> 과일 = ['사과', '참외', '배', '포도', '복숭아', '귤', '배', '딸기']

>>> 과일.index('포도')  ## 포도의 위치정보를 인덱싱으로 확인

3


>>> 과일[3] = '수박'  ## 포도의 위치정보에 수박을 입력

>>> print(과일)

['사과', '참외', '배', '수박', '복숭아', '귤', '배', '딸기']


데이터 정렬하기


>>> 과일 = ['사과', '참외', '배', '포도', '복숭아', '귤', '배', '딸기']

>>> 과일.reverse()  ## 리스트의 순서를 뒤집기

['딸기', '배', '귤', '복숭아', '포도', '배', '참외', '사과']


>>> 과일.sort()  ## 리스트를 순서대로 정렬

>>> print(과일)

['귤', '딸기', '배', '배', '복숭아', '사과', '참외', '포도']


데이터 정렬하기


>>> 과일 = ['사과', '참외', '배', '포도', '복숭아', '귤', '배', '딸기']

>>> 과일.count('배')  ## 리스트 내 값의 갯수를 확인

2


데이터 합치기


>>> 과일1 = ['사과', '참외', '배', '포도']

>>> 과일2 = ['복숭아', '귤', '배', '딸기']

>>> 과일  = 과일1 + 과일2

>>> print(과일)

['사과', '참외', '배', '포도', '복숭아', '귤', '배', '딸기']


데이터 반복하기


>>> 과일1 = ['사과', '참외', '배', '포도']

>>> 과일2 = 과일1 * 2

>>> print(과일2)

['사과', '참외', '배', '포도', '사과', '참외', '배', '포도']




튜플(tuple)


1. 만드는법

★괄호 없이 만들면 튜플이 된다.


>>> a = 1, 2, 3

>>> print(a)

(1, 2, 3)



둥근괄호로 감싸서 만든다.


>>> b = (4, 5, 6)

>>> print(b)

(4, 5, 6)



★tuple 함수에 다른 값을 넣어 튜플로 만든다.


>>> c = (7, 8, 9)

>>> c = tuple(c)

>>> print(c)

(7, 8, 9)


>>> c = [7, 8, 9]  ## 리스트를 튜플로 바꿀 수 있다.

>>> c = tuple(c)

>>> print(c)

(7, 8, 9)




2. 튜플의 인덱싱(indexing), 슬라이싱(slicing), 합치기, 반복 등은 리스트와 동일



3. 수정하기

★튜플은 수정이 불가능하다는 특징이 있음


>>> b = (4, 5, 6)

>>> b[1] = 100

TypeError                                 Traceback (most recent call last)

<ipython-input-119-c3babf5fb9d5> in <module>()

      1 b = (4, 5, 6)

----> 2 b[1] = 100

TypeError: 'tuple' object does not support item assignment ## 튜플을 수정하려고 하자 오류가 발생했다.



★튜플을 리스트로 변환하면 데이터 수정이 가능함


>>> b = (4, 5, 6)

>>> b = list(b)  ## 튜플을 리스트로 변경

>>> print(b)

[4, 5, 6]


>>> b[1] = 100  ## 값 수정

>>> print(b)

[4, 100, 6]


>>> b = tuple(b)  ## 리스트를 다시 튜플로 수정

>>> print(b)

(4, 100, 6)  ## 5가 100으로 수정된 튜플




사전(dictionary)


1. 만드는법

★중괄호를 활용하여 키(key)와 값(value)를 콜론(:)으로 짝지어서 만든다.


>>> 과일 = {'사과' : 'apple', '배' : 'pear', '포도' : 'grape'}

>>> print(과일)

{'사과' : 'apple', '배' : 'pear', '포도' : 'grape'}



★dict 함수로 만든다.


>>> 과일 = dict(사과 = 'apple', 배 = 'pear', 포도 = 'grape')  ## 키(key) 값에는 따옴표가 없다.

>>> print(과일)

{'사과' : 'apple', '배' : 'pear', '포도' : 'grape'}



2. 기본 개념

★사전 자료를 키(key)로 인덱싱하면 값(value)을 받을 수 있다.


>>> 과일['포도']

'grape'



★키(key)가 중복되면, 나중에 나온 값(value)이 저장된다.  ## 키(key)는 중복 없이 유니크 해야 한다.


>>> 과일 = {'사과' : 'apple', '배' : 'pear', '포도' : 'grape', '사과' : 'green apple'}  ## '사과' 키(key)가 중복됨

>>> print(과일)

{'사과': 'green apple', '배': 'pear', '포도': 'grape'}



★키(key)에는 숫자, 문자, 튜플 등 불변(immutable)인 값들만 넣을 수 있다. 리스트와 같이 가변적인(mutable) 값은 키(key)로 사용할 수 없다.



3. 자료 확인

★키(key) 확인하기


>>> 과일.keys()

dict_keys(['사과', '배', '포도'])



★값(value) 확인하기


>>> 과일.values()

dict_values(['apple', 'pear', 'grape'])



★키(key)와 값(value) 짝지어 확인하기


>>> 과일.items()

dict_items([('사과', 'apple'), ('배', 'pear'), ('포도', 'grape')])  ## 리스트로 관리되고 있다.



★키(key)의 존재 확인


>>> 과일.get('복숭아', '없는 key 입니다.')  ## 있는 key를 찾으면 해당 value를 출력한다.

                                                       ## 없는 key를 찾으면 지정된 값을 출력한다. 

                                                       ## 지정된 값이 없으면 아무것도 출력하지 않는다.

'없는 key 입니다.'



★키(key)의 존재 확인


>>> '복숭아' in 과일

False



4. 자료 수정

★키(key)를 삭제할 수 있다.


>>> 과일 = {'사과' : 'apple', '배' : 'pear', '포도' : 'grape'}

>>> del 과일['배']  

>>> print(과일)

{'사과' : 'apple', '포도' : 'grape'}  ## 키(key)를 지우면 값(value)도 함께 삭제됨



★사전을 전부 지울 수 있다.


>>> 과일.clear()

>>> print(과일)

{ }



★키(key)와 값(value)을 추가할 수 있다.


>>> 과일 = {'사과' : 'apple', '배' : 'pear', '포도' : 'grape'}

>>> 과일['복숭아'] = 'peach'

>>> print(과일)

{'사과': 'apple', '배': 'pear', '포도': 'grape', '복숭아': 'peach'}



★"+"를 이용한 결합은 안되지만, update를 할 수 있다.


>>> 과일1 = {'사과': 'apple', '배': 'pear'}

>>> 과일2 = {'딸기' : 'strawberry', '바나나' : 'banana'}

>>> 과일1.update(과일2)

>>> print(과일)

{'사과': 'apple', '배': 'pear', '딸기': 'strawberry', '바나나': 'banana'}



★값(value)을 수정할 수 있다.


>>> 과일['포도'] = 'fresh grapes'  ## 리스트에서 인덱싱으로 값을 수정하는 것과 동일한 방법이다.

>>> 과일['포도']

'fresh grapes'




집합(set)


1. 만드는법

★중괄호로 감싸서 만든다. ## 사전과 동일하게 중괄호를 사용하지만, 키(key)와 값(value)의 짝이 없는 차이가 있다.


>>> a = { 1, 3, 2, 3, 1 }

>>> print(a)

{1, 2, 3}  ## 중복이 사라지고, 순서가 보존되지 않는다.



★set 함수로 만든다.


>>> b = (1, 3, 4, 2, 1, 1, 1)

>>> c = set(b)

>>> print(c)

{1, 2, 3, 4}


>>> 과일 = {'사과' : 'apple', '배' : 'pear', '포도' : 'grape'}

>>> d = set(과일)

>>> print(d)

{'배', '사과', '포도'}  ## 사전을 set하면 키(key)의 집합으로 변환된다.


>>> e =  set('hello')

>>> print(e)

{'e', 'l', 'h', 'o'}



2. 자료 수정 및 활용

★집합에 값 추가하기


>>> 과일 = {'배', '사과', '포도'}

>>> 과일.add('딸기')

>>> print(과일)

{'배', '딸기', '사과', '포도'}



★하나 이상의 값은 update로 추가


>>> 과일 = {'배', '사과', '포도'}

>>> 과일.update(['복숭아', '바나나', '수박']

>>> print(과일)

{'배', '복숭아', '사과', '포도', '수박', '바나나'}



★값 제거는 remove로 할 수 있다.


>>> 과일 = {'배', '사과', '포도'}

>>> 과일.remove('사과')

>>> print(과일)

{'배', '포도'}


★합집합 ( | 또는 union)  ## "|"는 "shift + \"를 누르면 나타난다. 


>>> num_1 = {1, 2, 3}

>>> num_2 = {3, 4, 5}

>>> print(num_1 | num_2)

>>> print(num_1.union(num_2))

{1, 2, 3, 4, 5}

{1, 2, 3, 4, 5}



★교집합 ( & 또는 intersection)


>>> num_1 = {1, 2, 3}

>>> num_2 = {3, 4, 5}

>>> print(num_1 & num_2)

>>> print(num_1.intersection(num_2))

{3}

{3}



★차집합 ( - 또는 difference)


>>> num_1 = {1, 2, 3}

>>> num_2 = {3, 4, 5}

>>> print(num_1 - num_2)

>>> print(num_1.difference(num_2))

{1, 2}

{1, 2}




2018.09.07. 코리.



+ Recent posts