오늘은 교육 2주 차의 첫날이다. 저번 교육 과정에서는 파이썬을 배우는데 2주 정도 걸렸던 것으로 기억하는데, 이번 과정에서는 오늘 파이썬 파트가 마무리되고 내일부터 데이터 분석에 대해서 배우기 시작한다.
li1 = [1, 2.0, '3']
type(li1) # list
dir(li1)
append(x) : x를 리스트 마지막에 추가extend(iter) : 이터러블을 리스트 마지막에 추가insert(idx, x) : idx 위치에 x 삽입remove(x) : x를 삭제pop(idx) : idx 위치의 원소를 삭제 후 반환sort() : 오름차순 정렬, 자료형이 섞여 있으면 에러 발생reverse() : 순서를 뒤집음index(x) : x의 첫번째 인덱스 반환, 없으면 에러 발생count(x) : x의 개수 반환, 없으면 0 반환print(li1 + li2) # [1, 2.0, '3', 1, 3, 5, 3]
print(li2 * 2) # [1, 3, 5, 3, 1, 3, 5, 3]
print(1 in li1) # True
print(3 in li1) # False
li3 = [1, 2, '3', '4', ['가', '나', '다']]
print(li3[0]) # 1
print((li3[2])) # 3 (type = str)
print(li3[-1]) # ['가', '나', '다']
li3[:4] # [1, 2, '3', '4']
li3[4:] # [['가', '나', '다']]
li3[4:][0][0] # '가'
li3[4][0] # '가'
# li[[0, 2]] # 팬시 인덱싱 불가능
[li3[0], li3[2]] # [1, '3']
ints = range(6)
print(ints)
print(type(ints))
# range(0, 6)
# <class 'range'>
list(range(6))
# [0, 1, 2, 3, 4, 5]
list(range(1, 6))
# [1, 2, 3, 4, 5]
list(range(1, 6, 2))
# [1, 3, 5]
li4 = list(range(6))
li4[1:4:2] # [1, 3]
li4[:4:2] # [0, 2]
li4[1::2] # [1, 3, 5]
li4[::2] # [0, 2, 4]
list.append(x) : 지정한 객체를 리스트 마지막 원소로 추가li4.append(6)
print(li4) # [0, 1, 2, 3, 4, 5, 6]
# append 메서드로는 한 번에 하나만 추가할 수 있음
li4.append([7, 8])
print(li4) # [0, 1, 2, 3, 4, 5, 6, [7, 8]]
li4.append(7)
li4.append(8)
# 리스트 결합은 원본 데이터에 반영하지 않으므로 원본에 반영하고 싶으면 재할당 필요
li4 = li4 + [7, 8]
# append 및 extend 메서드는 원본 리스트에 반영하므로 재할당하면 안됨
list.extend(iter) : 지정한 시퀀스(이터러블) 원소를 리스트 마지막 원소로 추가li4.extend([7, 8])
print(li4) # [0, 1, 2, 3, 4, 5, 6, [7, 8], 7, 8]
list.insert(idx, x) : 지정한 인덱스 위치에 객체를 삽입li4.insert(1, [7, 8])
print(li4) # [0, [7, 8], 1, 2, 3, 4, 5, 6, [7, 8], 7, 8]
해당 메서드들은 실행 결과를 리스트에 업데이트하고 None을 반환
list.remove(x) : 지정한 원소를 리스트에서 한 번 삭제li4 # [0, [7, 8], 1, 2, 3, 4, 5, 6, [7, 8], 7, 8]
li4.count([7, 8]) # 2
# 반복문으로 특정 원소 삭제
n = li4.count([7, 8])
for i in range(n):
li4.remove([7, 8])
li4 # [0, 1, 2, 3, 4, 5, 6, 7, 8]
list.pop(idx) : 지정한 인덱스 원소를 리스트에서 삭제 후 반환# 인덱스 지정해서 삭제
li4.pop(6)
li4 # [0, 1, 2, 3, 4, 5, 7, 8]
# 인덱스 지정 생략 시 마지막 원소 삭제
li4.pop()
li4 # [0, 1, 2, 3, 4, 5, 7]
li4[0] = 6
li4 # [6, 1, 2, 3, 4, 5, 7]
li4[1] = [1, 2]
li4 # [6, [1, 2], 2, 3, 4, 5, 7]
li4[1:3] = [2, 1]
li4 # [6, 2, 1, 3, 4, 5, 7]
# 원소의 개수가 달라도 가능
li4[3:4] = [3, 0]
li4 # [6, 2, 1, 3, 0, 4, 5, 7]
li4[4:5] = 1
# NameError: name 'li4' is not defined
list.sort() : 리스트 원소를 오름차순 정렬list.sort(reverse=True) : 내림차순 정렬li4 # [6, 2, 1, 3, 0, 4, 5, 7]
li4.sort()
li4 # [0, 1, 2, 3, 4, 5, 6, 7]
# 내림차순 정렬
li4.sort(reverse=True)
li4 # [7, 6, 5, 4, 3, 2, 1, 0]
list.reverse() : 리스트 원소를 뒤집음li1 # [1, 2.0, '3']
li1.reverse()
li1 # ['3', 2.0, 1]
sorted(list) : 인수의 원소를 오름차순 정렬한 결과를 반환reverse=True 속성 지정 시 내림차순 정렬li2 # [1, 3, 5, 3]
sorted(li2) # [1, 3, 3, 5]
li2 # [1, 3, 5, 3]
li2 = sorted(li2)
li2 # [1, 3, 3, 5]
() 또는 tuple() 을 사용해서 생성tup = (1, 2.0, '3')
type(tup) # tuple
dir(tup)
tup[2] # '3'
tup[2] = 3
# TypeError: 'tuple' object does not support item assignment
# 튜플 원소 변경
tup = list(tup)
type(tup) # list
tup[2] = 3
tup # [1, 2.0, 3]
tup = tuple(tup)
type(tup) # tuple
tup # (1, 2.0, 3)
set1 = {3, 1, 2, 1}
set1 # {1, 2, 3}
type(set1) # set
dir(set1)
li2 # [1, 3, 5, 3]
set2 = set(li2)
set2 # {1, 3, 5}
set1[0]
# TypeError: 'set' object is not subscriptable
# 교잡헙
set1 & set2 # {1, 3}
# 합집합
set1 | set2 # {1, 2, 3, 5}
# 차집합
set1 - set2 # {2}
dct = {'item': 'pants', 'size': 'XL'}
dct # {'item': 'pants', 'size': 'XL'}
dct_1 = dict(item='pants', size='XL')
dct_1 # {'item': 'pants', 'size': 'XL'}
# 딕셔너리의 키는 정수, 실수, 문자열 가능
dct_2 = {0: 1, 1: 2.0, 3:'3'}
dct_2 # {0: 1, 1: 2.0, 3: '3'}
# dict 클래스를 사용할 때 키는 문자열만 가능
dct_3 = dict(0=1, 1=2.0, 2='3')
# SyntaxError: expression cannot contain assignment, perhaps you meant "=="?
'item' in dct # True
'shop' in dct # False
# 딕셔너리에 없는 키를 대괄호 안에 지정하면 에러 발생
dct['item'] # 'pants'
dct['shop'] # KeyError
items() : 딕셔너리의 모든 키와 값을 튜플로 묶어서 반환keys() : 딕셔너리의 모든 키를 반환values() : 딕셔너리의 모든 값을 반환dct.keys() # dict_keys(['item', 'size'])
dct['shop'] = 'A1'
dct # {'item': 'pants', 'size': 'XL', 'shop': 'A1'}
del dct['item']
dct # {'size': 'XL', 'shop': 'A1'}
dct['shop'] = 'A2'
dct # {'size': 'XL', 'shop': 'A2'}
if 조건문에 지정하는 조건 코드는 실행 결과로 True 또는 False를 스칼라로 반환해야 함
input() : 사용자가 입력한 값을 문자열로 반환score = input('점수 :') # 100
score # '100'
score = float(score)
score # 100.0
score >= 100 # True
score = float(input('점수 :'))
if score >= 90:
print('합격')
elif score >= 80:
print('재검사')
else:
print('불합격')
if score >= 90:
print('합격')
if score >= 90: print('합격')
scores = list(range(60, 101, 10))
scores # [60, 70, 80, 90, 100]
scores >= 90
# TypeError: '>=' not supported between instances of 'list' and 'int'
scores[0] >= 90 # False
for i in range(len(scores)):
if scores[i] >= 90:
print(f'{i} : 합격')
elif scores[i] >= 80:
print(f'{i} : 재검사')
else:
print(f'{i} : 불합격')
# 0 : 불합격
# 1 : 불합격
# 2 : 재검사
# 3 : 합격
# 4 : 합격
값1 if 조건1 else 값2'합격' if scores[0] >= 90 else '재검사'
# else 뒤에 새로운 조건 사용 가능
'합격' if scores[0] >= 90 else '재검사' if scores[0] >= 80 else '불합격'
menu = ['짜장면', '탕수욕', '깐풍기', '짬뽕밥', '전가복', '샥스핀']
for item in menu:
print(item, '시킬까요?')
# 짜장면 시킬까요?
# 탕수욕 시킬까요?
# 깐풍기 시킬까요?
# 짬뽕밥 시킬까요?
# 전가복 시킬까요?
# 샥스핀 시킬까요?
for item in menu:
print(item, '시킬까요?')
if item in ['짜장면', '짬뽕밥']:
print('-> 요리부터 주문합시다!')
print('-> 다음 메뉴는 뭔가요?\n')
for item in menu:
print(item, '시킬까요?')
if item in ['짜장면', '짬뽕밥']:
continue
print('-> 다음 메뉴는 뭔가요?\n')
for item in menu:
print(item, '시킬까요?')
if item in ['전가복', '샥스핀']:
break
print('-> 다음 메뉴는 뭔가요?\n')
for i in range(2, 10):
print(f'=== {i} 단 ===')
for j in range(1, 10):
print(f'{i} X {j} = {i * j}')
print()
print('반복문 실행 완료')
nums = range(1, 11)
sqrs = []
for i in nums:
sqrs.append(i ** 2)
sqrs # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
nums = range(1, 11)
sqrs = []
for i in nums:
if i % 2 == 0:
sqrs.append(i ** 2)
sqrs # [4, 16, 36, 64, 100]
nums = range(1, 11)
sqrs = []
for i in nums:
if i % 2 == 0:
sqrs.append(i ** 2)
else:
sqrs.append(i * 2)
sqrs # [2, 4, 6, 16, 10, 36, 14, 64, 18, 100]
[i ** 2 for i in nums]
[i ** 2 for i in nums if i % 2 == 0]
[i ** 2 if i % 2 == 0 else i * 2 for i in nums]
for idx, value in enumerate(menu):
print(f'{idx + 1}번째 메뉴는 {value}입니다.')
# 1번째 메뉴는 짜장면입니다.
# 2번째 메뉴는 탕수욕입니다.
# 3번째 메뉴는 깐풍기입니다.
# 4번째 메뉴는 짬뽕밥입니다.
# 5번째 메뉴는 전가복입니다.
# 6번째 메뉴는 샥스핀입니다.
price = [10000, 20000, 28000, 11000, 60000, 60000]
for i, j in zip(menu, price):
print(f'{i}의 가격은 {j:,}원 입니다.')
# 짜장면의 가격은 10,000원 입니다.
# 탕수욕의 가격은 20,000원 입니다.
# 깐풍기의 가격은 28,000원 입니다.
# 짬뽕밥의 가격은 11,000원 입니다.
# 전가복의 가격은 60,000원 입니다.
# 샥스핀의 가격은 60,000원 입니다.
enumerate()와 zip() 같이 사용for (idx, vlaue), p in zip(enumerate(menu), price):
print(f'{idx + 1}번째 메뉴는 {vlaue}이고, 가격은 {p:,}원 입니다.')
# 1번째 메뉴는 짜장면이고, 가격은 10,000원 입니다.
# 2번째 메뉴는 탕수욕이고, 가격은 20,000원 입니다.
# 3번째 메뉴는 깐풍기이고, 가격은 28,000원 입니다.
# 4번째 메뉴는 짬뽕밥이고, 가격은 11,000원 입니다.
# 5번째 메뉴는 전가복이고, 가격은 60,000원 입니다.
# 6번째 메뉴는 샥스핀이고, 가격은 60,000원 입니다.
for i in nums:
if i % 3 == 0:
i = str(i)
print(i ** 2)
# TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int'
try : 정상적으로 실행할 코드 블럭을 추가except : 에러가 발생했을 시 실행될 코드 추가except 여러번 사용 가능(에러 종류별)for i in nums:
try:
if i % 3 == 0:
i = str(i)
print(i ** 2)
except:
print('에러 발생')
# 1
# 4
# 에러 발생
# 16
# 25
# 에러 발생
# 49
# 64
# 에러 발생
# 100
Exception as e 사용for i in nums:
try:
if i % 3 == 0:
i = str(i)
print(i ** 2)
except Exception as e: # 에러 메시지를 출력하도록 설정
print(e)
# 1
# 4
# unsupported operand type(s) for ** or pow(): 'str' and 'int'
# 16
# 25
# unsupported operand type(s) for ** or pow(): 'str' and 'int'
# 49
# 64
# unsupported operand type(s) for ** or pow(): 'str' and 'int'
# 100
i = 5
while i >= 0:
print(i)
i -= 1
# 5
# 4
# 3
# 2
# 1
# 0
while True:
i += 1
if i >= 10000:
break
print(i) # 10000
def bmi(hgt, wgt):
bmi = wgt / (hgt / 100) ** 2
return bmi
bmi(hgt=178, wgt=70)
bmi(178, 70)
def bmi(hgt, wgt:float=70) -> float:
'''
This function returns bmi from weight(kg) and height(cm)
'''
return wgt / (hgt / 100) ** 2
전달인수의 기본값이 없는 매개변수는 왼쪽에, 있는 매개변수는 오른쪽에 놓아야 함
() 로 사용하거나 변수에 할당하여 사용 가능(lambda hgt, wgt: wgt / (hgt / 100) ** 2)(175, 70)
bmi2 = lambda hgt, wgt: wgt / (hgt / 100) ** 2
bmi2(175, 70)
sqrs = map(lambda x: x**2, nums)
list(sqrs) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
result = filter(lambda x: x % 2 == 0, nums)
list(result) # [2, 4, 6, 8, 10]
# 전역 변수 목록 확인방법(주피터 노트북 매직 명령어)
%whos
# 특정 타입만 확인 -v 다음에 Type 추가
%whos -v list
지역 변수, 전역 변수, 내장 함수 순으로 실행
sum(nums) # 55
def sum(x, y=0):
for i in x:
y -= i
return y
sum(nums) # -55
# 전역 변수 삭제
del sum
sum(nums) # 55
*args : 개수 제한이 없는 위치 인수를 튜플로 전달def printArgs(*args):
for i in args:
print(i)
printArgs(1, 2, 3)
# 1
# 2
# 3
**kwargs : 개수 제한이 없는 키워드 인수를 딕셔너리로 전달def printKwargs(**kwargs):
for k, v in kwargs.items():
print(f'{k}: {v}')
printKwargs(메뉴='순대국', 가격=9000, 평점=4.5, 위치='창동')
# 메뉴: 순대국
# 가격: 9000
# 평점: 4.5
# 위치: 창동
함수 → 모듈(py 파일) → 패키지(폴더) → 라이브러리
# 모듈 전체 불러오기
import myFuncs
# 별칭으로 모듈 불러오기
import myFuncs as mf
# 원하는 일부 함수만 가져오기
from myFuncs import bmi
myFuncs.bmi(175, 70)
mf.bmi(175, 70)
bmi(175, 70)
오늘 정말 상당히 많은 내용을 다뤘다. 이미 한 번 배웠던 내용들이 아니었으면 꽤나 힘들었을 것 같다. 내일부터 데이터 분석에 대해 배우기 시작하는데, NumPy랑 Pandas에 대해서는 파이썬 정도로 알고 있는 건 아니니까 집중해서 잘 배워야겠다.