본문 바로가기

공부방/Upstage AI Lab 4기

7/4 학습일지 | 파이썬 | 리스트 vs 딕셔너리, 반복문

1. 리스트와 딕셔너리

Q. 서점에서 도서 관련 정보를 프로그램에 저장하려고 한다. 도서 정보는 책 제목, 도서번호, 도서분류가 있다. 현재 도서는 5권이다(예스24에서 베스트셀러 기준으로 대충 5권 긁어옴) 다음 두 가지 방식으로 데이터를 관리할 때, 차이점은 무엇인지 생각해보자.

책 제목 | ISBN | 도서분류

불변의 법칙 | 9791198517425 | 경제경영
THE MONEY BOOK 더 머니북 | 9791198686114 | 경제경영
나를 소모하지 않는 현명한 태도에 관하여 | 9791198682505 | 자기계발
초역 부처의 말 | 9791193506516 | 인문
나는 다정한 관찰자가 되기로 했다 | 9791198752406 | 교육

리스트로 관리하기

book1 = "불변의 법칙 | 9791198517425 | 경제경영"
book2 = "THE MONEY BOOK 더 머니북 | 9791198686114 | 경제경영"
book3 = "나를 소모하지 않는 현명한 태도에 관하여 | 9791198682505 | 자기계발"
book4 = "초역 부처의 말 | 9791193506516 | 인문"
book5 = "나는 다정한 관찰자가 되기로 했다 | 9791198752406 | 교육"

books = [book1, book2, book3, book4, book5]
booklist = []

for book in books:
    booklist.append(book.replace("|", ",").split(","))

namelist=[]
for book in booklist:
    namelist.append(book[0])

numberlist=[]
for book in booklist:
    numberlist.append(book[1])

categorylist=[]
for book in booklist:
    categorylist.append(book[2])

print(namelist)
print(numberlist)
print(categorylist)

 

리스트로 만들었을 때에는 namelist[0] 이렇게 인덱스 번호로 접근할 수 있음. 리스트는 안에 있는 원소를 순차적으로 접근하거나, 처리할 때 유용하다. ex) namelist[0:3] 첫 번째 책부터 4번째 책이름을 표시해. 

대신 요소가 복잡한 구조를 가지게 되면 그 의미를 파악하기 어려울 수 있다. -> 여러 리스트를 만들어야 함. 리스트 안에 리스트..

리스트 안에 새로운 원소를 넣거나 제거하면 인덱싱이 달라지기 때문에 헷갈린다. 

 

딕셔너리로 관리하기

library = {
    0 : {"name" : "불변의 법칙", "number" : "9791198517425", "category" : "경제경영"},
    1 : {"name" : "THE MONEY BOOK 더 머니북", "number" : "9791198686114", "category" : "경제경영"},
    2 : {"name" : "나를 소모하지 않는 현명한 태도에 관하여", "number" : "9791198682505", "category" : "자기계발"},
    3 : {"name" : "초역 부처의 말", "number" : "9791193506516", "category" : "인문"},
    4 : {"name" : "나는 다정한 관찰자가 되기로 했다", "number" : "9791198752406", "category" : "교육"}
    }


print(library[0]["number"])

딕셔너리도 키값인 번호를 입력해서 값을 찾을 수 있음. 

직관적으로는 딕셔너리가 더 쉽고 빠르게 정보를 찾을 수 있을 것 같다. 

 

2. 반복문

5000원으로 먹을 수 있는 커피 음료를 찾아보자!

coffees = ['아메리카노', '카페라떼', '카페모카', '바닐라라떼', '핸드드립', '콜드브루']
prices = [4100, 4600, 4600, 5100, 6000, 5000]


#인덱스를 이용한 방법
for i in range(0, 6):
    if prices[i] <= 5000:
        print(coffees[i])
        
#enumerate 함수 사용
for i, price in enumerate(prices):
    if price <= 5000:
        print(coffees[i])

#zip으로 묶어서 한방에 

for coffee, price in zip(coffees, prices):
    if price<=5000:
        print(coffee)

첨에 이 문제 풀 때 커피랑 커피가격을 딕셔너리로 묶을라고 쌩쇼를 하다가.. 하하 첫번째 솔루션을 찾음. 

+ 오늘만 특별히 모든 메뉴가 500원이 할인된다고 했을 때, 먹을 수 있는 음료는? 이건 나는 today라는 500원 할인된 값이 들어간 새로운 리스트를 만들었다. 

coffees = ['아메리카노', '카페라떼', '카페모카', '바닐라라떼', '핸드드립', '콜드브루']
prices = [4100, 4600, 4600, 5100, 6000, 5000]

today=[]
for i in range (6):
    a=int(prices[i])
    today.append(a-500)
    if today[i] <= 5000:
        print(coffees[i])

print(today)