자료구조 기초

Sooin Yoon·2025년 3월 28일

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

  • List => students = ['lee', 'kim', 'park', 'hong'] 리스트는 변경 가능, 중복가능
  • Tuple => jobs = ('doctor', 'accounter', 'resercher')한번 정해지면 바꿀수 없음
  • Dic => scores = {'kor':88, 'eng':91, 'mat':95, 'sci':90, 'his':100} key,value 값으로 나타남
  • Set => allSales = {100, 150, 90, 110} 중복되는 데이터가 허용되지 않음, 순서상관없음

list

: 배열과 같이 여러 개의 데이터를 나열한 자료구조

  • '[]'를 이용해서 선언하고 데이터 구분은 ','를 이용한다
  • 숫자, 문자(열), 논리형 등 모든 기본 데이터를 같이 저장할수 있다
  • 리스트 안에 또 다른 컨데이커 자료형 데이터를 저장할수 있다

list item 조회

: index? 아이템은 인덱스를 이용해서 조회 가능함
인덱스는 0부터 시작
ex) 5명의 학생 이름을 리스트에 저장하고 인덱스가 홀수인 학생과 짝수(0)포함인 학생을 구분해서 인덱스와 학생 이름을 출력해보자

students = ['kim', 'lee', 'park', 'yoon', 'hong']

for i in range(len(students)):
    if i % 2 ==0: #짝수
        print('짝수: ', i, students[i])
    else:
        print('홀수: ', i, students[i])

list 길이

: len()함수 사용

  • 리스트의 개수뿐만 아니라 문자열의 길이도 알 수 있음
    예제 문제) 좋아하는 운동 종목을 리스트에 저장하고 반복문을 이용해서 출력해보자
myFavoriteSports = ['swim', 'basketball', 'baseball', 'running']

n = 0
while n < len(myFavoriteSports):
    print('myFavoriteSports[{}]: {}'.format(n, myFavoriteSports[n]))
    n +=1
    
for item in myFavoriteSports:
	print(item)

list와 for문

#1
for i in range(len(cars)):
	print(cars[i])

#2
for car in cars:
	print(car)
    
#3
studentCnts = [[1,19], [2,20], [3,22], [4,18], [5,21]]
for classNo, cnt in studentCnts:
    print('{}학급 학생 수: {}'.format(classNo, cnt))
    print(classNo+cnt)
<<< 
1학급 학생 수: 19
20
2학급 학생 수: 20
22
3학급 학생 수: 22
25
4학급 학생 수: 18
22
5학급 학생 수: 21
26    

studentCnts = [[1,18], [2,19], [3,23], [4,21], [5,20], [6,22], [7,17]]

classNo = 0
sum = 0
for classNo, cnt in studentCnts:
    print('{}학급 학생수 {}'.format(classNo, cnt))
    sum += cnt
    classNo = classNo
print('평균 학생 수 : ', sum/classNo)

list와 while문

: while문을 이용하면 다양한 방법으로 아이템 조회가 가능하다

cars = ['그랜져', '소나타', '말리부', '카니발', '쏘렌토']

#1
n = 0
while n < len(cars):
    print(cars[n])
    n+=1
    
#2
n = 0
flag = True
while flag:
    print(cars[n])
    n += 1

    if n == len(cars):
        flag = False

#3
n = 0
while True:
    print(cars[n])
    n += 1
    if n == len(cars):
        break
        
        
#example
minScore = 60
scores = [
    ['국어', 58],
    ['영어', 77],
    ['수학', 89],
    ['과학', 99],
    ['국사', 50]]

n = 0
while n < len(scores): 
    if scores[n][1] < minScore:
        print('과락 과목: {}, 점수: {}'.format(scores[n][0], scores[n][1]))
    n += 1

enumerate()

: index와 item을 동시에 조회하기
for idx, value in enumerate(list)

#사용자가 입력한 문자열에서 공백의 개수를 출력해보자
message = input('put in the message : ')
cnt = 0
for idx, value in enumerate(message):
    if value == ' ':
        cnt += 1

list에 item 추가

: append() 함수 사용하면 마지막 인덱스에 아이템 추가됨

myFamilyAge = [['father', 66], ['mother', 62], ['me', 34]]
myFamilyAge.append(['brother', 33])

list의 특정 위치에 아이템 추가

: insert()함수를 사용해 특정 위치(인덱스)에 아이템을 추가할 수 있음

students = ['kang', 'park', 'hong', 'lee', 'kim']
students.insert(2, 'yoon')  #index2번째에 삽입
students
<<< ['kang', 'park', 'yoon', 'hong', 'lee', 'kim']

numbers = [1, 3, 6, 11, 45, 54, 62, 74, 85]
inputNumber = 55
insertIdx = 0

for idx, v in enumerate(numbers):
    if insertIdx == 0 and inputNumber < v:
        insertIdx = idx
numbers.insert(insertIdx, inputNumber)
print(numbers)

list의 아이템 삭제

: pop() 함수를 이용하면 마지막 인덱스에 해당하는 아이템을 삭제할 수 있음

  • pop() : 마지막 인덱스 삭제
  • pop(3) : 3번째 인덱스 삭제

list의 특정 아이템 삭제

: remove() 함수를 이용하면 특정 아이템을 삭제

  • remove는 한개 아이템만 삭제 가능해 삭제하려는 데이터가 2개 이상이라면 while문 이용
studnets.remove('park')

students = ['hong', 'park', 'yoon', 'kim', 'kang', 'park']
students.remove('park') 은 한개만 삭제됨, park 두 개 다 삭제하고 싶으면

while 'park' in studnets:
	studnets.remove('park')

list 연결

  1. 확장 : extend() => 리스트에 또 다른 리스트를 연결(확장)할 수 있음
    • 을 사용해서 연결
group1 = ['hong', 'kim', 'lee']
group2 = ['kang', 'park', 'yoon']
group1.extend(group2)
group1 
<<< 
['hong', 'kim', 'lee', 'kang', 'park', 'yoon']

group1 = ['hong', 'kim', 'lee']
group2 = ['kang', 'park', 'yoon']
result = group1 + group2 # 새로운 리스트 생성
<<< ['hong', 'kim', 'lee', 'kang', 'park', 'yoon']

list item 정렬

: sort()함수를 이용하면 아이템을 정렬할 수 있다.

  • default sort() 오름차순
  • sort(reverse=True) 내림차순

playerScore.sort() #playerScore 자체가 바뀜

result = sorted(playerScore) #새로운 변수에 들어감 

list item 순서 뒤집기

: reverse() 반대로 나열됨

students.reverse()

list slicing

  • [n:m]을 이용하면 리스트에서 원하는 아이템만 뽑아낼 수 있음
    ex) [2:4] => 2<= x < 4=> 2,3
    [:,4] => 처음부터 3까지 => 0 ,1, 2 ,3
    [2:] => 2부터 끝까지 => 2,3,4,....
    [2:-2:2] => 2부터 끝에서 2번째까지 2번씩 뛰어서
    [:-2:2] => 처음부터 뒤에서 두번째까지 2번씩 뛰어서
    [::2] => 처음부터 끝까지 2번씩 뛰어서
  • slice()함수 사용해서 아이템을 슬라이싱 할수있다.
    ex) studnets[slice(2,4)] => 콜론 사용하는것과 똑같은데 slice 사용

list 다른 기능

  • 리스트 곱셈 연산 : studentsMul = students * 3(리스트 자체가 3번 곱해짐)
  • 아이템 위치 찾기 : index(item) 함수를 item의 인덱스를 알아낼 수 있다.
students = ['kang', 'park', 'hong', 'lee', 'kim']
searchIdx = students.index('park')
searchIdx

searchIdx = students.index('park', 2, 6) 범위설정해서 위치찾기
  • 특정 아이템의 개수 알아내기 : count()함수를 이용해서 특정 아이템의 개수를 알아낼 수 있다.
students = ['kang', 'park', 'hong', 'lee', 'kim', 'kang']
searchNum = students.count('kang')
searchNum
  • 특정 아이템 삭제 : del키워드를 이용하면 특정 아이템을 삭제할 수 있음
    인덱스로 삭제, 슬라이싱도 가능, 리스트도 삭제 가능
del students[1]
del students[1:4] #슬라이싱 

튜플

: 리스트와 비슷하지만 아이템 변경(수정, 삭제 등) 불가

  • 숫자, 문자(열) 논리형 등 모든 기본 데이터를 같이 저장할 수 있다
  • 튜플에 또 다른 컨데이너 자료형 데이터를 저장할 수도 있다
studnets = ('park', 'kim', 'lee', 'hong')
numbers = (10, 20, 30, 40, 50, 70)
strs = (3.14, '십', '20, 'one', '3.141592')
datas = (10,20,30(40,50,60))

튜플 아이템 조회

: 리스트와 마찬가지로 아이템에 자동으로 부여되는 번호표가 있다 => 인덱스

in과 not in 키워드

: 아이템의 존재 유/뮤를 알 수 있음 => True/False

if searchName in studentsTuple:
	print("학생은 우리반 학생입니다")
else:
	print("학생은 우리반 학생이 아닙니다")

튜플 길이

: len()으로 튜플에 저장된 아이템 개수를 튜플 길이라고 한다

투플 결합

: 두 개의 튜플을 합쳐서 새로운 튜플을 만들자
extend()는 안됨, 단지 + 가능함 왜? 새로운 튜플을 만드는거니깐

result = group1 + group2

myNumbers = (1,3,5,6,7)
friendNumbers = (2,3,5,8,10)

for num in friendNumbers :
    if number not in myNumbers:
        myNumbers = myNumbers + (number, ) # (number, ) 이렇게 하면 순간 튜플로 바뀌고 튜플+튜플 계산이 가능해짐

튜플 슬라이싱

: 리스트와 비슷

list와 tuple

tuple item 정렬

tuple과 for문

tuple과 while문

Dictionary

Dictionary 조회

Dictionary 추가

Dictionary 수정

keys(), Values()

Dictionary 삭제

Dictionary 유용한 기능

0개의 댓글