Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 존써
- 쏜버커
- 텔레
- 펜더
- group by
- 조인
- to_date
- case문
- Prs
- Decode
- oracle
- 로스티드메이플
- 파이썬
- Asato
- 서브쿼리
- SQL
- Suhr
- 논리연산자
- Python
- 오더
- 로즈우드
- MateusAsato
- 메서드
- 오라클
- ansi표준
- 커스텀
- 스트라토캐스터
- 메이플
- 적용함수
- 리스트
Archives
- Today
- Total
Big Bro's Studying Archive
Python 기초 5 : 딕셔너리와 튜플, 그리고 반복문 연습 본문
@author: Yoon Baek
5번째 시간 생각할 것들
딕셔너리 in Pyth와 리스트 in R의 유사성
: key - value 구조
딕셔너리나 시리즈, 데이터 프레임이 key를 가짐으로써
얻는 이득은 무엇이며 어떻게 활용할 수 있는가?
반복문은 중요하므로 항상 연습
2차원 형식의 리스트 출력
지난 시간에 배운 2차원 형식의 리스트를 출력해 보자.
z = 1
for i in range(0,3) :
for j in range(0,3) :
print(z, end = ' ')
z = z + 1
print()
출력되는 값을 기준으로 2차원 형식의 리스트를 입력
반대로 2차원 형식의 리스트를 입력하는 법
z = 1
outlist = []
for i in range(0,3) :
inlist = []
for j in range(0,3) :
inlist.append(z)
z = z + 1
outlist.append(inlist)
0부터 3의 배수로 5 * 4 리스트 입력 및 출력
# 입력
z = 0
outlist = []
for i in range(0,4):
inlist = []
for j in range(0,5):
inlist.append(z*3)
z = z + 1
outlist.append(inlist)
# 출력
for i in range(0,len(outlist)):
for j in range (0,len(inlist)):
print('%2d' % outlist[i][j], end = ' ')
print()
튜플 (tuple)
- 리스트와 동일한 자료구조(1차원, 서로 다른 데이터 타입 허용)
- 수정불가(읽기전용)
- 수정되면 안되는 참조용 생성시 필요
1. 생성
t1 = (1,2,3)
t2 = 1,2,3
t3 = (10,) # 하나면 ,를 찍어서 튜플이라는 것을 표시해줘야 한다.
t4 = (10)
type(t2) # tuple
type(t3) # tuple
type(t4) # int
이렇듯 다양한 생성 방법이 있고, t3와 t4의 차이에 유의하자.
t4는 튜플이 아니다.
참고
a1, a2, a3 = 1,2,3 # 각 변수에 1,2,3 각각 삽입. t2와의 차이점
2. 수정
t1[0] = 10 # 'tuple' object does not support item assignment
t1.append(11) # 'tuple' object has no attribute 'append'
del(t1[0]) # 'tuple' object doesn't support item deletion
del(t1) # 가능
이렇듯 튜플은 수정이 거의 불가능한 읽기전용이므로
특정원소에 대한 수정 및 삭제가 되지 않는다.
딕셔너리
- R에서의 리스트와 비슷
- key - value 형식으로 저장하는 특징
- Series, Dataframe의 기본 구조
1. 생성
d1 = {'a':1, 'b':2}
type(d1) # dict
d2 = {'a':[1,2], 'b':[2,3]}
2. 색인
d1['a'] # [1,2]
d1.get('a')
[ 참고 - dict와 Series, DataFrame 관계 ]
from pandas import Series
from pandas import DataFrame
# pandas 모듈에서 불러올 수 있다.
Series(d1) # 키값이 들어옴 : Series 역시 key value 구조임을 의미
DataFrame(d2) # "
Series([1,2,3])
DataFrame({'a':[1,2,3], 'b':[4,5,6]}) # Dataframe은 키전달 필수
3. 수정
d1['b'] = 22
d1['c'] = 3 # 키 기반이기 때문에 없는 키의 추가가 용이
4. 삭제
del(d1['c'])
d1['b'] = NA
#[ 참고 - R에서의 NULL, NA 표현식 대체 ]
from numpy import nan as NA
연습문제) 다음의 리스트와 딕셔너리를 참고하여 전화번호를 완성 : 02)345-4958
l1 = ['345-4958', '334-0948', '394-9050', '473-3853']
l2 = ['서울', '경기', '부산', '제주']
area_no = {'서울' : '02', '경기' : '031', '부산' : '051', '제주' : '064'}
area_no['서울'] # '02'
f1 = lambda x : area_no[x]
area_no_number = list(map(f1, l2))
f2 = lambda x, y : x + y
area_num = list(map(f2, area_no_number, [')',')',')',')']))
list(map(f2, area_num, l1))
실습문제
좋아하는 음식 출력 프로그램
sol1 : while문에 종료 키값을 넣은 쿼리
food = {'food1' : ['떡볶이','짜장면','라면','피자','맥주','치킨','삼겹살'],
'food2' : ['쿨피스','탕수육','김치','피클','육포','맥주','밥']}
v1 = ''
while v1 != '끝' :
v1 = input("['떡볶이','짜장면','라면','피자','맥주','치킨','삼겹살'] 중 좋아하는 음식은? : ")
if v1 in food.get('food1') :
print('<%s> 궁합음식은 <%s>입니다.' % (v1, food.get('food2')[food.get('food1').index(v1)]))
if v1 == '떡볶이' :
print('근데 %s는 음식이 아닙니다.' % v1)
elif v1 != '끝' :
print('그런 음식이 없습니다. 확인해보세요')
sol2 : 딕셔너리와 break를 활용한 쿼리
d1 = {'치킨':'치킨무','라면':'김치','떡볶이':'어묵','짜장면':'단무지','피자':'콜라'}
flist = list(set(d1))
set(d1)
while 1 :
ans = input(str(flist) + '중 좋아하는 음식은? ')
if ans in flist :
print('<%s> 궁합음식은 <%s>입니다.' % (ans, d1.get(ans)))
elif ans == '끝' :
print('프로그램 종료')
break
else :
print('그런 음식이 없습니다. please check.')
불규칙한 리스트의 입력과 출력
sol1 : z를 입력하면 리스트 입력이 중단
i = 1
value = 1
outlist = []
while 1 :
ans = input('%d 번째 생성할 리스트 수를 입력하세요 : ' % i)
if ans == 'z' :
break
inlist = []
for j in range(0, int(ans)):
inlist.append(value)
value = value +1
outlist.append(inlist)
for i in outlist :
for j in i :
print('%2d' % j, end = ' ')
print()
print('프로그램 종료')
계산기 프로그램 작성
: 1. 수식 계산 프로그램 2. 두 수 사이 합계인 두가지 기능 계산 프로그램
choice = input('1. 수식 계산 프로그램 \n2. 두 수 사이 합계 출력 프로그램\n 기능선택 : ')
if choice == '1' :
ans = input('계산할 수식을 입력하세요 : ')
res = eval(ans)
print('%s 결과는 %d입니다.' % (ans, res))
if choice == '2' :
num1 = int(input('첫 번째 숫자? : '))
num2 = int(input('두 번째 숫자? : '))
vsum =0
for i in range(num1, num2 + 1) :
vsum += i
print('%d와 %d 사이 수의 합은 %d.' % (num1,num2,vsum))
모듈이름과 함수패턴 전달 시 매칭되는 함수명 출력
def 함수명 (인자1, 인자2, ...) :
본문
return 리턴 대상
위 형식으로 만들어보자.
import numpy
'zeros' in dir(numpy) # zero가 dir(numpy)라는 리스트의 원소입니까? (정확한 일치여부 - True)
'ze' in dir(numpy) # False
'ze' in 'zeros' # True 문자열에 적용할 경우 True
def find_func(mname, fname) :
flist = dir(mname) # mname : module name
for func in flist :
if fname in func :
outlist.append(func)
return outlist
find_func(numpy,'na')
# numpy 모듈에 'na'가 들어간 함수 모두 출력
'Big Data展' 카테고리의 다른 글
R 프로그래밍 입문 (1) 변수의 선언과 기본적인 형변환함수, 날짜함수 (0) | 2020.04.16 |
---|---|
SQL by Oracle # 5. group by와 join, union & 실습문제 (0) | 2020.04.14 |
Python 기초 4 : 리스트의 벡터활용 메서드와 함수, for, while, if 문을 활용한 다양한 문제풀이 (0) | 2020.04.09 |
Python 기초 3 : 리스트 형식의 이해, lambda 람다 함수와 적용함수 map (0) | 2020.04.09 |
SQL by Orcale # 4. decode, case문, group by절과 having절 (0) | 2020.04.08 |
Comments