파이썬에서는 숫자나 문자를 담을 수 있는 자료구조가 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. 코리.
'Bigdata_tips' 카테고리의 다른 글
Python - Seaborn Import Error (DDL load failed) (7) | 2020.01.05 |
---|---|
파이썬 - 할당연산자 (=, +=, -=, *=, /=, %=, **=, //=) (0) | 2018.09.11 |
파이썬-자료형(숫자, 문자, 변수, 자료형변환) (0) | 2018.09.05 |
파이썬 - 셀(행, 라인) 조작하기 (0) | 2018.09.04 |
엑셀 비밀번호 입력 오류 해결 (1) | 2018.07.12 |