[Python 기초] 04-1 자료구조

홍랑·2021년 10월 17일
0

Python

목록 보기
5/6
*using Python - PyCharm Community Edition

📌 자료구조란?

  • 컨테이너 자료형: 여러개의 데이터가 묶여있는 자료형
  • 자료구조: 컨테이너 자료형의 데이터 구조

대표적인 자료구조는 리스트(list), 튜플(tuple), 딕셔너리(dict), 세트(set) 가 있다.

📌 list

  • 배열과 같이 여러 개의 데이터를 나열한 자료구조
  • [] 를 이용해 선언하고 , 를 이용해 데이터 구분
  • 숫자, 문자(열), 논리형 등 모든 데이터 같이 저장 가능
  • 리스트에 또 다른 컨테이너 자료형 데이터 저장 가능
students = ['홍길동', '박찬호', '이용규', '박승철', '김지은']
print('students: {}'.format(students))
# students: ['홍길동', '박찬호', '이용규', '박승철', '김지은']

numbers = [10, 20, 30, 40, 50, 60, 70, 80, 90]
print('numbers: {}'.format(numbers))
# numbers: [10, 20, 30, 40, 50, 60, 70, 80, 90]

인덱스 - 아이템에 자동으로 부여되는 번호표

  • 리스트 아이템은 인덱스를 이용해서 조회 가능
students = ['홍길동', '박찬호', '이용규', '박승철', '김지은']
print(students[0])	# 홍길동
print(students[1])	# 박찬호
print(students[2])	# 이용규
print(students[3])	# 박승철
print(students[4])	# 김지은

numbers = [10, 20, 30, 40, 50, 60, 70, 80, 90]
print(numbers[0])	# 10
print(numbers[1])	# 20
print(numbers[5])	# 60
print(numbers[7])	# 80
print(numbers[8])	# 90

길이 - 리스트에 저장된 아이템 개수

  • len()
  • 반복문과 함께 리스트의 아이템 조회 가능
students = ['홍길동', '박찬호', '이용규', '박승철', '김지은']
sLen = len(students)

for i in range(sLen):
    print(students[i])
    
# len() 은 문자열 길이 확인도 가능
str = "Hello Python!"
print(len(str))	# 13

📚 list와 반복문

for문

  • for문을 이용해 리스트의 아이템 자동 참조
  • list와 주로 사용되는 반복문
cars = ['그랜저', '소나타', '말리부', '카니발', '쏘렌토']

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

for car in cars:
    print(car)
    
studentCnts = [[1,19],[2,20],[3,22],[4,18],[5,21]]

for i in range(len(studentCnts)):
    print('{}학습 학생수: {}'.format(studentCnts[i][0], studentCnts[i][1]))

for classNo, cnt in studentCnts:
    print('{}학습 학생수: {}'.format(classNo, cnt))
    
# 조건문과 함께 사용
minScore = 60
scores = [['국어', 58], ['영어',77],['수학',89],['과학', 99], ['국사', 50]]

for item in scores:
    if item[1] < minScore:
        print('과락 과목: {}, 점수: {}'.format(item[0], item[1]))

for subject, score in scores:
    if score < minScore: continue
    print('과락 과목: {}, 점수: {}'.format(subject, score))

while문

  • while문을 이용해 다양한 방법으로 아이템 조회
cars = ['그랜저', '소나타', '말리부', '카니발', '쏘렌토']
n = 0
flag = True

while True:
    print(cars[n])
    n += 1

    if n == len(cars):
        flag = False
        break
        
        
minScore = 60
scores = [['국어', 58], ['영어',77],['수학',89],['과학', 99], ['국사', 50]]
n = 0

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

📚 enumerate()

  • 인덱스와 아이템 한 번에 조회
  • enumerate() 이용 아이템 열거 가능
sports = ['농구', '수구', '축구', '마라톤', '테니스']

for idx, value in enumerate(sports):
    print('{}: {}'.format(idx, value))
    
# 문자열에도 적용 가능
str = 'hello python!'
for idx, value in enumerate(str):
     print('{}: {}'.format(idx, value))

📚 list에 추가하기

append() - 마지막 인덱스에 아이템 추가

students = ['홍길동', '박찬호', '이용규', '박승철', '김지은']
print('students length: {}'.format(len(students)))	# 5
print('last index: {}'.format(len(students) - 1))	# 4

students.append('유태오')
print('students: {}'.format(students))
# ['홍길동', '박찬호', '이용규', '박승철', '김지은', '유태오']
print('students length: {}'.format(len(students)))	# 6
print('last index: {}'.format(len(students) - 1))	# 5



scores = [['국어', 88], ['영어', 91]]
print('scores length: {}'.format(len(scores)))		# 2
print('last index: {}'.format(len(scores) - 1))		# 1

scores.append(['수학', 96])
print('scores: {}'.format(scores))
# [['국어', 88], ['영어', 91], ['수학', 96]]
print('scores length: {}'.format(len(scores)))		# 3
print('last index: {}'.format(len(scores) - 1))		# 2

insert() - 특정 위치(인덱스)에 아이템 추가

students = ['홍길동', '박찬호', '이용규', '박승철', '김지은']

students.insert(3, '유태오')
print('students: {}'.format(students))
# ['홍길동', '박찬호', '이용규', '유태오', '박승철', '김지은']



# 오름차순으로 된 숫자의 정렬 유지하며 사용자가 입력한 정수 추가

nums = [1, 3, 6, 11, 45, 54, 62, 74, 85]
inputNum = int(input('숫자 입력: '))
insertIdx = 0

for idx,number in enumerate(nums):
     if insertIdx == 0 and inputNum < number:
          insertIdx = idx

nums.insert(insertIdx, inputNum)
print('nums: {}'.format(nums))
# 20을 입력하면
# nums: [1, 3, 6, 11, 20, 45, 54, 62, 74, 85]

📚 list에서 삭제하기

pop() - 마지막 인덱스에 해당하는 아이템 삭제
pop(n) - n 인덱스에 해당하는 아이템 삭제

students = ['홍길동', '박찬호', '유태오', '이용규', '박승철', '김지은']

students.pop()
print('students: {}'.format(students))
# ['홍길동', '박찬호', '유태오', '이용규', '박승철']

remov = students.pop(3)
print('removed: {}'.format(remov))
# 이용규
print('students: {}'.format(students))
# ['홍길동', '박찬호', '유태오', '박승철']

remove() - 특정 아이템 삭제

  • 한 개의 아이템만 삭제 가능
  • 2개 이상이면 while문 이용
students = ['홍길동', '유태오', '이종원', '송강', '권혁우', '이주연', '홍길동']

students.remove('홍길동')
print(students)
# ['유태오', '이종원', '송강', '권혁우', '이주연', '홍길동']

while '홍길동' in students:
     students.remove('홍길동')
print(students)
# ['유태오', '이종원', '송강', '권혁우', '이주연']

📚 list 연결

extend() - 또 다른 리스트를 연결(확장)
덧셈기호 - '+' 기호로 연결

group1 = ['유태오', '이종원', '송강']
group2 = ['권혁우', '이주연', '홍길동']

group1.extend(group2)
print(group1)	# ['유태오', '이종원', '송강', '권혁우', '이주연', '홍길동']
print(group2)	# ['권혁우', '이주연', '홍길동']

result = group1 + group2
print(group1)	# ['유태오', '이종원', '송강']
print(group2)	# ['권혁우', '이주연', '홍길동']
print(result)	# ['유태오', '이종원', '송강', '권혁우', '이주연', '홍길동']

📚 list 정렬

sort() - 아이템 정렬

students = ['홍길동', '유태오', '이종원', '송강', '권혁우', '이주연']
students.sort()
# ['권혁우', '송강', '유태오', '이종원', '이주연', '홍길동']
students.sort(reverse=True)
# ['홍길동', '이주연', '이종원', '유태오', '송강', '권혁우']

num = [4, 52, 33, 81, 2.8, 1.7, 90, 2]
num.sort()
# [1.7, 2, 2.8, 4, 33, 52, 81, 90]
num.sort(reverse=True)
# [90, 81, 52, 33, 4, 2.8, 2, 1.7]

📚 reverse()

  • 아이템 순서 뒤집기
students= ['홍길동', '유태오', '이종원', '송강', '권혁우', '이주연']
students.reverse()
# ['이주연', '권혁우', '송강', '이종원', '유태오', '홍길동']

num = [2, 4, 6, 8, 3, 5]
num.reverse()
# [5, 3, 8, 6, 4, 2]

📚 list 슬라이싱

[n:m] - list의 n부터 m 인덱스 아이템 추출

students= ['홍길동', '유태오', '이종원', '송강', '권혁우', '이주연']
print(students[1:3])	# ['유태오', '이종원']
print(students[:3])	# ['홍길동', '유태오', '이종원']
print(students[1:])	# ['유태오', '이종원', '송강', '권혁우', '이주연']
print(students[1:-3])	# ['유태오', '이종원']

num = [2, 4, 6, 8, 3, 5, 0.02, 2.5, 7.34]
print(num[::2])		# [2, 6, 3, 0.02, 7.34]

slice() - 아이템 슬라이싱

students= ['홍길동', '유태오', '이종원', '송강', '권혁우', '이주연']
print(students[slice(4)])	# ['홍길동', '유태오', '이종원', '송강']
print(students[slice(1, 4)])	# ['유태오', '이종원', '송강']

📚 list의 나머지 기능

  • list *n: n번 반복해 나타냄
  • list.index('아이템'): 아이템 인덱스 확인
  • list.count('아이템'): 아이템 중복 개수 확인
  • del list[n]: n 아이템 삭제
students = ['유태오', '이종원', '송강', '유태오']
print(students * 2)		# ['유태오', '이종원', '송강', '유태오', '유태오', '이종원', '송강', '유태오']
print(students.index('유태오'))	# 0
print(students.count('유태오'))	# 2

del students[3]
print(students)			# ['유태오', '이종원', '송강']


num = [2, 33, 52, 17]
print(num * 2)			# [2, 33, 52, 17, 2, 33, 52, 17]
print(num.index(52))		# 2
print(num.count(33))		# 1	

del num[2]
print(num)			# [2, 33, 17]
profile
호랑이 기운이 솟아나요🐯

0개의 댓글