파이썬 - 자료구조

hs0820·2023년 6월 20일

파이썬

목록 보기
12/16
post-thumbnail

📝 파이썬 - 자료구조

📌 자료구조

✏ 자료구조란?

  • 여러 개의 데이터가 묶여있는 자료형을 컨테이너 자료형이라고 하고, 이러한 컨테이너 자료형의 데이터 구조를 자료구조라고 한다.

✏ 다양한 자료구조

  • 자료구조는 각각의 컨테이너 자료형에 따라서 차이다 있으며, 파이썬의 대표적인 컨테이너 자료형으로는 리스트(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)])['짱구', '철수', '맹구', '유리', '훈이']
['맹구', '유리']
profile
개발 스터디 노트

0개의 댓글