데이터 분석/Python

[실습] 데이터 구조

toraa 2025. 1. 7. 16:37

[실습1] 관심있는 메뉴 3개를 묶은 menu 리스트를 생성하고 append( )로 메뉴 하나 더 추가하세요

menu = ['파스타','돈가스','치킨']
menu.append('식빵')
menu
['파스타', '돈가스', '치킨', '식빵']

▶ menu=menu.append('식빵')으로 적는다면, return이 없는 함수이므로 none이 반환됨을 주의!

 

 

[실습2] menu에서 세번째 메뉴를 '우동'으로 변경하고 세번째~마지막 메뉴를 선택하여 출력하세요

menu[2]='우동'
menu[2:]
['우동', '식빵']

 

 

[실습3] '메뉴이름' 키에는 메뉴이름이, '가격' 키에는 해당 메뉴의 가격이 입력된 딕셔너리 하나를 생성하세요

menu_d ={'메뉴이름':'우동','가격':7000}

 

 

[실습4] 다음 리스트 내부에 값을 1씩 더한 값으로 수정하여 리스트를 출력하세요

내 코드>

nums = [1,2,3,4,5]

nums = [x + 1 for x in nums]
print(nums)

풀이 코드> 두가지 버전

nums = [1,2,3,4,5]

for i, n in enumerate(nums):
	nums[i] = n+1
nums
for i in range(len(nums)):  #range(5)가 됨
	nums[i] += 1
nums
[2, 3, 4, 5, 6]

▶ enumerate를 활용한 방법은 데이터에 접근해서 수정하는거라 더 깔끔한 것 같다!

 

 

[실습5] 다음 두개의 리스트를 활용하여 실습3 에서 구성한 형태의 딕셔너리를 3개 만들고 이를 보관하는 리스트를 만들어 출력하세요

내 코드>

menu = ['치킨','피자','국밥']
price = [20000, 23000, 10000]

menu1 = {'메뉴이름':'치킨','가격':20000}
menu2 = {'메뉴이름':'피자', '가격':23000}
menu3 = {'메뉴이름':'국밥', '가격':10000}
menu_list=[menu1,menu2,menu3]
menu_list

풀이 코드>

menus = []
for i in range(len(menu)):
	d = {}
    d['메뉴이름'] = menu[i]
    d['가격'] = price[i]
    menus.append(d)
menus
[{'메뉴이름': '치킨', '가격': 20000},
 {'메뉴이름': '피자', '가격': 23000},
 {'메뉴이름': '국밥', '가격': 10000}]

 range(len())을 활용하여 더 간단하게 만들 수 있음

for문을 활용해서 접근하는 것 연습 필요!

 

 

[실습6] 실습5에서 만든 리스트에서 1번 메뉴의 가격을 인덱싱하여 출력하세요

내 코드>

menu1 ['가격']

풀이 코드>

menus[1]['가격']
20000
 

 

 

[실습7] 다음 세 리스트를 이어붙이고 이름 순으로 정렬하여 출력하세요

list1 = ['a','f','c']
list2 = ['b','e']
list3 = ['a','f']

내 코드>

list_sub = list1 + list2 + list3
list_sub.sort()
print(list_sub)

 

풀이 코드>

list1.extend(list2)
list1.extend(list3)
list1.sort()
list1
['a', 'a', 'b', 'c', 'e', 'f', 'f']

▶나는 새로운 list에 더하기 연산자를 이용해 이어붙였는데, extend 함수를 이용해서 붙일 수도 있다

 

 

[실습8] 실습7에서 만든 리스트에서 중복을 제거하여 출력하세요

new_list = []

for item in list_sub:
    if item not in new_list:
        new_list.append(item)
        
print(new_list)

풀이 코드>

set(list_sub)
['a', 'b', 'c', 'e', 'f']

▶ 간단하게 set()함수를 이용하면 중복 제거 가능

 

 

[실습9] 다음 s1 문자열에서 stop_words에 해당하는 단어를 뺀 단어 리스트를 만들어 출력하세요

출력 결과 예시
['삼성', '빅데이터', '데이터분석', '파이썬', '시각화', '판다스']

 

s1 = '  새싹 빅데이터 데이터분석 데이터구조 파이썬 시각화 판다스     '
stop_words = '데이터구조'

 

내 코드>

s2 = s1.split()
filter_word = [word for word in s2 if word != stop_words]
print (filter_word)

 

풀이 코드>

s_strip = s1.strip()
words = s_strip.split('')

w_list = []
for w in words:
	if w != stop_words:  #if not w in stop_words:
    	w_list.append(w)
w_list
['새싹', '빅데이터', '데이터분석', '파이썬', '시각화', '판다스']

▶ 처음에 오류났는데, 같지 않다를 =!로 잘못 썼다. =!가 아니라 != 임을 기억하자

풀이에선 strip함수를 이용해서 앞뒤 공백을 제거했다.

strip으로 공백 제거 후, split 사용해서 리스트 만들어야 함

 

 

[실습10] 3개의 딕셔너리를 for문과 인덱싱을 활용하여 다음과 같은 리스트-딕셔너리 구조로 만들어 출력하세요

출력결과 예
[{'주문자': 'G밸리', '상품명': '노트북', '가격': 200}, {'주문자': 'G밸리', '상품명': '샴푸', '가격': 2}, {'주문자': '데이터분석', '상품명': '초코렛', '가격': 1}, {'주문자': '파이썬', '상품명': '자전거', '가격': 15}, {'주문자': '파이썬', '상품명': '셔츠', '가격': 1}, {'주문자': '파이썬', '상품명': '초코렛', '가격': 1}]

users = {'123':'G밸리',
         '124':'파이썬',
         '125':'데이터분석',}

products = {'a':['노트북', 200],
            'b':['자전거', 15],
            'c':['샴푸', 2],
            'd':['셔츠', 1],
            'e':['초코렛', 1]}

orders = [{'user_id':'123', 'products':['a','c']},
         {'user_id':'125', 'products':['e']},
         {'user_id':'124', 'products':['b','d','e']}]

 

내 코드>

new_orders = []

for order in orders:
    user_name = users[order['user_id']] 
    
    for product_id in order['products']:
        product_name, product_price = products[product_id] 

        new_orders.append({'주문자': user_name, '상품명': product_name, '가격': product_price}) 

print(new_orders)

 

풀이 코드>

delivery = []
for o in orders:
	u_id = o['user_id'] #123
    u_name = users[u_id] #G밸리
    ps = o['products'] #['a', 'c']
    for p in ps:   #p는 상품ID, ps는 리스트
    	# p='a'
        pname = products[p][0]
        price = products[p][1]
        d = {'주문자':u_name, '상품명':pname, '가격':price}
        delivery.append(d)
        
print(delivery)

 

▶ 처음엔 pop을 이용해서 이름을 바꿔서 해보려고 했다..

 

처음 내가 짠 코드:

new_orders = []

for item in orders:
    item['주문자']=item.pop('user_id')
    item['상품명']=item.pop('products')

 

for문을 이용해서 데이터 접근해서 원하는 형식으로 만드는게 핵심이므로 반복문 연습하기!