akxltmzk
1/21/2020 - 12:34 PM

기본 ~ 데이터 구조

// 수치
17 // 5  # 3(나머지 버림)
5**2 # 25(5의 2승)
round(3.1415151515,2) # 3.14 (2자리까지만 보이기)
--------------------------------------
import math # 수연산 추가 임포트 할때
print(help(math)) # 메서드 헬프
================================================================================
// print로 출력하기

print('I dont\'t know')
print("say \"say hello\"")
print(r'c:\name\name') # row data 출력시 앞에 r을 붙인다
# 여러 라인을 출력할때
print("""\    
line1
line2
line3\
"""
)
print('HI'*2) # HI를 2번 출력할때
================================================================================
// 문자열 인덱스와 슬라이스

word = 'python'
print(word[0]) # p
print(word[-1]) # n (가장마지막 문자열)
print(word[0:2]) # py (2의 앞에까지 출력)
print(word[:2]) # py(0생략 가능, 위와 같음)
print(word[2:]) # thon(2번째 까지 자르고 나머지만 출력)
word[0] = 'j' # 오류(문자열에 대입할수는 없음)
word = 'j'+word[1:] # jython
len(word) # length구하기
================================================================================
// 문자의 메서드
s = 'My name is Mike. Hi Mike'
is_start = s.startswith('My') # True(My로 문자가 시작합니까?)
print(s.find('mike')) # 11(11번째에 mike가 있습니다)
print(s.rfind('mike')) # 20(20번째에 마지막 mike가있습니다)
print(s.count('mike')) # 2(mike는 두번 있습니다)
print(s.capitalize()) # 맨앞의 m만 대문자로 만들고 모두 소문자로 만든다
print(s.title()) # 문자의 앞은 모두 대문자로 된다
print(s.upper()) # 모두 대문자로
print(s.lower()) # 모두 소문자로
print(s.replace('Mike','Nancy')) # Mike를 Nancy로 치환
================================================================================
//문자의 대입
'a is {}'.format('a') # a is a 
'a is {2}{1}{0}'.format(1,2,3) # a is 321 
'My name is {0} {1}'.format('Do','Hyunwoo') # My name is do hyunwoo
'My name is {name} {family}'.format(family='Do',name='Hyunwoo') # My name is do hyunwoo
----
str() # 문자열로 변환
================================================================================
//리스트형
l = [1 , 20 , 4 , 50 , 2, 1 ,2]
l[:2] # 1 , 20
l[2:] # 4 , 50 , 2, 1 ,2
l[2:5] # 4 , 50 , 2
l[:] # 전부출력
-------
a = ['a','b','c']
n = [1,2,3]
x = [a,n] # [['a','b','c'],[1,2,3]](배열 합치기 가능하다 !)
================================================================================
//리스트의 조작
s = ['a','b','c','d','e','f','g']
s[2:5] = ['C','D','E'] # ['a','b','C','D','E','f','g']
s.append(100) # ['a','b','C','D','E','f','g',100]
s.pop(100) # ['a','b','C','D','E','f','g']
s.insert(0,100) # [100,'a','b','C','D','E','f','g']
s.pop(0) #['a','b','C','D','E','f','g']
----------
n = [1,2,2,2,5]
n.remove(2) # [1,2,2,5](첫번째로 나오는 2를 삭제해라)
a = [1,2]
b = [3,4]
a+b # [1,2,3,4]
================================================================================
//리스트의 메서드
r=[1,2,3,4,5,1,2,3]
r.index(3) # 2(3은 2번째의 인덱스에 있습니다)
r.index(3,3) # 7(3번째에 있는 4부터 검색을해서 3을 착고 그건 7번째 인덱스에 있습니다)
r.count(3) # 2(3은 2개 있습니다)
-------
if 4 in r:
  print('exist') #'exist'(4가 배열 r안에 있으니깐 exist)
--------
r.sort() #오름차순
r.sort(reverse=True) #내림차순
--------
s = 'My name is Mike.'
to_split = s.split('') # ['My','name','is','Mike']
' '.join(to_split) # My name is Mike(공백란으로 연결해서 이어준다 배열을)
'#'.join(to_split) # My#name#is#Mike(이어주는곳에 어떤거든 대입 가능)
================================================================================
//리스트 복사
i = [1, 2, 3, 4, 5]
j = i
j[0] = 100
print(i) #[100, 1, 2, 3, 4, 5]
print(j) #[100, 1, 2, 3, 4, 5] -> i의 주소값이 j에도 넘어오니깐 i의 앞에도 100이 들어온다
-------
i = [1, 2, 3, 4, 5]
j = i.copy() 혹은 j = i[:]
j[0] = 100
print(i) #[100, 1, 2, 3, 4, 5]
print(j) #[1, 2, 3, 4, 5] -> 주소값 복사를 하기 싫으면 copy() 혹은 [:]를 써줘야 한다.
================================================================================
//튜플형
t = (1,2,3,4,1,2) -> 읽기 밑 검색은 가능하지만 조작은 불가능한 형태이다
================================================================================
//튜플의 언팩킹
num_tuple = (10, 20)
x,y = num_tuple
print(x,y) # 10 20
-------
*다른언어에서는 값을 바꿀때
i = 10
j = 20
temp = i
i = j
j = temp

*python에서는
a = 100
b = 200
a,b = b,a # 사실 a,b =(b,a)인데 ()가 생략된거다 파이썬은 튜플로 인식함
================================================================================
// 사전형
d = {'x':10,'y':20}
d['x'] = '100' # x 바꾸기
d['z'] = 200 # 새로운 데이터 넣기 
-------
dict(a=10,b=20) # {'a' : 10 , 'b'= 20} -> 딕셔너리 생성하는 방법
================================================================================
// 사전형의 메서드
d = {'x':10,'y':20}
d.keys()
d.values()
------
d = {'x':10,'y':20}
d2 = {'x':1000,'j':300}
d.update(d2) # {'x':1000,'y':20,'j':300}(d에 d2를 오버라이드하세요,즉 같은 키값 x는 업데이트하고 없으면 j는 새로 생성)
d.pop('j') # {'x':1000,'y':20} 
d.clear()
'j' in d # False (아까 pop으로 삭제했으니깐 False)
================================================================================
// 사전형의 복사 
x = {'a' : 1}
y = x
y['a'] = 1000
print(x) # {'a' : 10000} (x의 주소값을 y가 공유하고 있으니 y를 수정해도 x도 같이 바뀐다, 이를 방지하기 위해서 y = x.copy()로 쓰자) 
print(y) # {'a' : 10000}
================================================================================
// 집합형
a = {1, 2, 2, 3, 4, 4, 4, 5, 6}
b = {2, 3, 3, 6, 7}
a # {1, 2, 3, 4, 5, 6}(a룰 출력해보면 중복된 값은 하나만 값이 출력된다 )
b # {2, 3, 6, 7}(b 또한 중복된 값은 하나만 출력한다 )
a-b # {1, 4 , 5}
b-a # {7}
a&b # {2, 3, 6}(공집합 구하기!! +가 아니라 &이다)
a|b # {1,2,3,4,5,6,7}(전체 집합)
a^b # {1, 4, 5, 6}(a에만 들어있는 값고 b에만 들어있는 값만 추출해서 보여줌)
================================================================================
 // 집합의 메서드 
 s = {1, 2, 3, 4, 5}
 s.add(6) #{1, 2, 3, 4, 5, 6}
 s.remove(6) #{1,2,3,4,5}
 s.clear()
 ================================================================================
 // 집합 사용의 예 
"""
중복된 값은 제거해서 하나로만 출력하고 싶다면,
리스트형을 집합형으로 바꾼후 출력하면 된다
"""
f = [1,1,1,1,2,2,2,3,3,3,3,4,4,4,4,4,5] 
kind = set(f) # 형변환
print(kind)
 ================================================================================
 // 제네레이터 내포 표기
 def g():
   for i in range(10):
     yield i

g = g()
print(next(g)) # 0
print(next(g)) # 1
print(next(g)) # 2
print(next(g)) # 3

g = (i for i in range(10)) # 이상하게 이렇게 만들면 튜플이 되는게 아니라 제너레이터가 된다!
* g = tuple(i for i in range(10)) # 만약 튜플로 쓰고 싶다면!
print(next(g)) #0
print(next(g)) #1
print(next(g)) #2
print(next(g)) #3
 ================================================================================
// 예외처리

l = [1,2,3]
i = 5

try:
  l[i]
except IndexError as exc:
  print('인덱스 발생!:{}'.format(exc)) 
except NameError as exc:
  print('네임 발생!:{}'.format(exc)) 
except IndexError as exc:
  print('기타에러 발생!:{}'.format(exc)) 
else:
  print('done') # except 에러에 걸리지 않고 빠져 나왔을때 실행(다음에 'clean up'이 찍힘)
finally:
  print('clean up') # 예외처리 맨 마지막에 실행 
  
print('done') # 'clean up' 다음에 'done'이 찍힘