📝 파이썬 - 자료구조
📌 자료구조
✏ 자료구조란?
- 여러 개의 데이터가 묶여있는 자료형을 컨테이너 자료형이라고 하고, 이러한 컨테이너 자료형의 데이터 구조를 자료구조라고 한다.
✏ 다양한 자료구조
- 자료구조는 각각의 컨테이너 자료형에 따라서 차이다 있으며, 파이썬의 대표적인 컨테이너 자료형으로는 리스트(List), 튜플(Tuple), 딕셔너리(Dic), 셋트(Set)가 있다.

✏ 리스트(List) 란?
- 배열과 같이 여러 개의 데이터를 나열한 자료구조.
def setList(n):
flag = True
list = []
while flag :
if flag:
getStr = input('input str : ')
list.append(getStr)
if len(list) == n:
flag = False
print(list)
setNum = int(input('How many will you add to the list? : : '))
setList(setNum)
↓
input str : 짱구
input str : 철수
input str : 맹구
['짱구', '철수', '맹구']
✏ 리스트 아이템 조회
- 인덱스
- 인덱스란, 아이템에 자동으로 부여되는 번호표
def setList(n):
flag = True
list = []
while flag :
if flag:
getStr = input('input str : ')
list.append(getStr)
if len(list) == n:
flag = False
return list
setNum = int(input('How many will you add to the list? : : '))
thisL = setList(setNum)
print('your list is : '.format(thisL))
print('list type is : {}'.format(type(thisL)))
for i in range(0, len(thisL)):
if i % 2 == 0 :
print('짝수 인덱스 List : {}'.format(thisL[i]))
else :
print('홀수 인덱스 List : {}'.format(thisL[i]))
↓
How many will you add to the list? : : 5
input str : 짱구
input str : 철수
input str : 맹구
input str : 훈이
input str : 유리
your list is :
list type is : <class 'list'>
짝수 인덱스 List : 짱구
홀수 인덱스 List : 철수
짝수 인덱스 List : 맹구
홀수 인덱스 List : 훈이
짝수 인덱스 List : 유리
✏ 리스트와 for문
- for문을 이용하면 리스트의 아이템을 자동으로 참조할 수 있다.
list = ['짱구','철수','맹구','훈이','유리']
cnt = [[1,20],[2,28],[3,19],[4,23],[5,21]]
for i in range(len(list)):
print('list : {}'.format(list[i]))
for friend in list:
print('friend : {}'.format(friend))
for no, c in cnt:
print('{}번째 값 : {}'.format(no,c))
↓
list : 짱구
list : 철수
list : 맹구
list : 훈이
list : 유리
friend : 짱구
friend : 철수
friend : 맹구
friend : 훈이
friend : 유리
1번째 값 : 20
2번째 값 : 28
3번째 값 : 19
4번째 값 : 23
5번째 값 : 21
- for문과 if문을 이용해서 과락 과목 출력하기
minScore = 60
scores = [['국어', 58],
['수학', 70],
['영어', 90],
['과학', 50],
]
for subject, socre in scores:
if socre >= minScore:
continue
else :
print('과락 과목 : {}, 점수 : {}'.format(subject, socre))
↓
과락 과목 : 국어, 점수 : 58
과락 과목 : 과학, 점수 : 50
✏ 리스트와 while문
- while문을 이용하면 다양한 방법으로 아이템 조회가 가능하다.
list = ['짱구','철수','맹구','훈이','유리']
flag = True
n=0
while flag :
print(list[n])
if n == (len(list) -1):
flag = False
n += 1
↓
짱구
철수
맹구
훈이
유리
- while문과 if문을 이용해서 과락 과목 출력하기
scores = [['국어', 58],
['수학', 70],
['영어', 90],
['과학', 50],
]
minScore = 60
n=0
while n < len(scores):
result = scores[n]
if result[1] < minScore :
print('과락 과목 : {}, 점수 : {}'.format(result[0], result[1]))
n += 1
↓
과락 과목 : 국어, 점수 : 58
과락 과목 : 과학, 점수 : 50
✏ enumerate() 함수
- enumerate() 함수를 이용하면 아이템을 열거할 수 있다.
list = ['짱구','철수','맹구','훈이','유리']
for idx, value in enumerate(list):
print('index : {}, value : {}'.format(idx, value))
↓
index : 0, value : 짱구
index : 1, value : 철수
index : 2, value : 맹구
index : 3, value : 훈이
index : 4, value : 유리
str = 'hello world'
for idx, value in enumerate(str):
print('index : {}, value : {}'.format(idx, value))
↓
index : 0, value : h
index : 1, value : e
index : 2, value : l
index : 3, value : l
index : 4, value : o
list = ['짱구','철수','맹구','훈이','유리']
favoriteCha = input('가장 좋아하는 캐릭터는? : ')
valueIdx = 0
for idx, value in enumerate(list):
print('index : {}, value : {}'.format(idx, value))
if value == favoriteCha :
valueIdx += idx + 1
print('가장 좋아하는 캐릭터 {}는 {}번째에 있습니다.'.format(favoriteCha, valueIdx))
↓
가장 좋아하는 캐릭터는? : 철수
index : 0, value : 짱구
index : 1, value : 철수
가장 좋아하는 캐릭터 철수은(는) 2번째에 있습니다.
index : 2, value : 맹구
index : 3, value : 훈이
index : 4, value : 유리
✏ 리스트에 아이템 추가
- append() 함수를 이용하면 마지막 인덱스에 아이템을 추가할 수 있다.
list = ['짱구','철수','맹구','훈이','유리']
print('character : {}'.format(list))
print('character length : {}'.format(len(list)))
print('character index : {}'.format(len(list) - 1))
list.append('짱아')
print('character : {}'.format(list))
print('character length : {}'.format(len(list)))
print('character index : {}'.format(len(list) - 1))
↓
character : ['짱구', '철수', '맹구', '훈이', '유리']
character length : 5
character index : 4
character : ['짱구', '철수', '맹구', '훈이', '유리', '짱아']
character length : 6
character index : 5
✏ 특정 위치에 아이템 추가
- insert() 함수를 이용하면 특정 위치(인덱스)에 아이템을 추가할 수 있다.
list = ['짱구','철수','맹구','훈이','유리']
print(list)
list.insert(1, '짱아')
print(list)
↓
['짱구', '철수', '맹구', '훈이', '유리']
['짱구', '짱아', '철수', '맹구', '훈이', '유리']
✏ 리스트의 아이템 삭제
- 마지막 인덱스 아이템 삭제 -> pop()
- pop(n) 함수로 n인덱스에 해당하는 아이템을 삭제할 수 있다.
list = ['짱구','철수','맹구','훈이','유리']
print(list)
rValue = list.pop()
print(list)
print('removed value : {}'.format(rValue))
↓
['짱구', '철수', '맹구', '훈이', '유리']
['짱구', '철수', '맹구', '훈이']
removed value : 유리
list = ['짱구','철수','맹구','훈이','유리']
print(list)
list.pop(3)
print(list)
↓
['짱구', '철수', '맹구', '훈이', '유리']
['짱구', '철수', '맹구', '유리']
✏ 특정 아이템 삭제
- remove() 함수를 이용하면 특정 아이템을 삭제할 수 있다.
list = ['짱구','철수','맹구','훈이','유리']
print(list)
list.remove('훈이')
print(list)
↓
['짱구', '철수', '맹구', '훈이', '유리']
['짱구', '철수', '맹구', '유리']
- remove()는 한 개의 아이템만 삭제 가능하다. 만약 삭제하려는 데이터가 2개 이상이라면 while문을 이용하자.
list = ['짱구','철수','맹구','훈이','유리', '훈이']
print(list)
rChar = input('삭제할 캐릭터를 입력해주세요. : ')
while rChar in list:
list.remove(rChar)
print(list)
↓
['짱구', '철수', '맹구', '훈이', '유리', '훈이']
삭제할 캐릭터를 입력해주세요. : 훈이
['짱구', '철수', '맹구', '유리']
✏ 리스트 연결
- extend() 함수를 이용하면 리스트에 또 다른 리스트를 연결(확장)할 수 있다.
list = ['짱구','철수','맹구','유리', '훈이']
list2 = ['봉미선', '신형만', '짱아']
print(list)
print(list2)
list.extend(list2)
print(list)
↓
['짱구', '철수', '맹구', '유리', '훈이']
['봉미선', '신형만', '짱아']
['짱구', '철수', '맹구', '유리', '훈이', '봉미선', '신형만', '짱아']
- 덧셈 연산자를 이용해서 리스트를 연결할 수도 있다.
list = ['짱구','철수','맹구','유리', '훈이']
list2 = ['봉미선', '신형만', '짱아']
print(list)
print(list2)
sumList = list + list2
print(sumList)
↓
['짱구', '철수', '맹구', '유리', '훈이']
['봉미선', '신형만', '짱아']
['짱구', '철수', '맹구', '유리', '훈이', '봉미선', '신형만', '짱아']
✏ 리스트 연결(확장)
- sort() 함수를 이용하면 아이템을 정렬할 수 있다.
list = ['짱구','철수','맹구','유리', '훈이']
print('list : {}'.format(list))
list.sort(reverse=False)
print('list : {}'.format(list))
list.sort(reverse=True)
print('list : {}'.format(list))
numbers = [1,2,3,10,4,5,30,6,7,8,11]
print(numbers)
numbers.sort()
print(numbers)
↓
list : ['짱구', '철수', '맹구', '유리', '훈이']
list : ['맹구', '유리', '짱구', '철수', '훈이']
list : ['훈이', '철수', '짱구', '유리', '맹구']
[1, 2, 3, 10, 4, 5, 30, 6, 7, 8, 11]
[1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 30]
✏ 리스트 아이템 순서 뒤집기
- reverse() 함수를 이용하면 아이템 순서를 뒤집을 수 있다.
list = ['짱구','철수','맹구','유리', '훈이']
print(list)
list.reverse()
print(list)
numbers = [1,3,2,11,1.23, 50, 40]
print(numbers)
numbers.reverse()
print(numbers)
↓
['짱구', '철수', '맹구', '유리', '훈이']
['훈이', '유리', '맹구', '철수', '짱구']
[1, 3, 2, 11, 1.23, 50, 40]
[40, 50, 1.23, 11, 2, 3, 1]
✏ 리스트 슬라이싱
- [n:m] 을 이용하면 리스트에서 원하는 아이템만 뽑아낼 수 있다.
- [2:4] -> 2 <= n < 4
list = ['짱구','철수','맹구','유리', '훈이']
print(list)
print(list[1:4])
print(list[:4])
print(list[2:])
print(list[1:-2])
print(list[-5:-2])
↓
['짱구', '철수', '맹구', '유리', '훈이']
['철수', '맹구', '유리']
['짱구', '철수', '맹구', '유리']
['맹구', '유리', '훈이']
['철수', '맹구']
['짱구', '철수', '맹구']
list = ['짱구','철수','맹구','유리', '훈이']
print(list[1:4:2])
print(list[::2])
↓
['철수', '유리']
['짱구', '맹구', '훈이']
- 슬라이싱을 이용해서 아이템을 변경할 수 있다.
list = ['짱구','철수','맹구','유리', '훈이']
print(list)
list[3:4] = ['짱아']
print(list)
↓
['짱구', '철수', '맹구', '유리', '훈이']
['짱구', '철수', '맹구', '짱아', '훈이']
- slice() 함수를 이용해서 아이템을 슬라이싱할 수 있다.
list = ['짱구','철수','맹구','유리', '훈이']
print(list)
print(list[slice(2,4)])
↓
['짱구', '철수', '맹구', '유리', '훈이']
['맹구', '유리']