파이썬

부족한 부분 채우기

백엔드 개발자 2021. 7. 14. 18:00

참고한 곳 : 파이썬 코딩 도장 

https://dojang.io/

 

-한줄에 여러 구문을 사용할 때 세미콜론으로 구분해준다.

 

-보통 들여쓰기는 공백4칸(탭1칸)을 기준으로 한다.

 

-블록이 같으면 들여쓰기 칸수가 같아야 한다.

 

-//연산자는 정수끼리 나눗셈에서 소수점아래를 버려준다.

하지만 실수에 //사용하면 결과는 실수로 나온다.

 

-객체 자료형 알아내기 type(값)

 

 

-몫과 나머지 한꺼번에 구하기

divmod(5,2) 5를 2로 나눈 몫과 나머지

-> ( 2(몫),1(나머지) ) 튜플

 

-2진수 : 0b010= 2 

 8진수 : 0o10 = 8

 16진수: 0xF = 15

 

-2실수 복소수로 만들기

complex(1.2 , 1.3)

 

 

- a,b= input('문자열 2개를 입력하세요').split()

 

 

-값 사이에 문자 넣기

print(1,2,3, sep=',')

-> 1,2,3

print(1,2,3, sep='\n')

-> 1,2,3

 

-end 사용

print(1, end=' ')

print(2, end=' ')

print(3)

->1 2 3

 

- 객체가 같은지 다른지 비교

is, is not은 객체끼리 비교한다.

1 is 1.0

-> False

 

그러나 값(숫자)를 비교할 때는 비교연산자를 사용해야한다.

a변수가 값이 있는 상태에서 다른값을 할당하면 메모리주소가 달라지므로,

a=5

a is 5 -> True

a=-6 a is -6 -> False

 

-bool(값)은 값이 있으면 무조건 True, 0이면 False

 

-단락 평가

and는 1번째만 확인하면 2번째는 확인안함.

or은 2번째까지 확인.

 

True and 'python'  -> 'python'  마지막으로 단락평가 실시한 값 그대로 반환

'python' and True   -> True

 

 -작은 따옴표안에 작은따옴표 넣기

'python isn\'t ' 

-> "python isn't"

 

 

-range로 리스트 채우기

a=list(range(10))

-> [0,1,2,3,4,5,6,7,8,9]

 

a=list(range(10,0,-1))  (시작,끝,증가폭)

-> [10,9,8,7,6,5,4,3,2,1]

 

 

-튜플

a=(10,20,30,)

요소가 1개인 튜플 만들기

(38,)  or 38,

튜플을 리스트로 만들기

a=[1,2,3]

tuple(a)

 

b=(4,5,6)

list(b)

 

 

-리스트 튜플 언패킹

x=[1,2,3]

a,b,c=x

-> 1 2 3      input().split()같은 느낌.

 

-패킹

a=[1,2,3]

 

 

-시퀀스 자료형

리스트,튜플, range, 문자열, bytes ,bytearray

 

특정 값 확인하기

a=[0,30,....]

30 in a  -> True

1 not in a -> False

 

객체 연결

 a = [0, 10, 20, 30]

 b = [9, 8, 7, 6]

 a + b [0, 10, 20, 30, 9, 8, 7, 6]

range는 안됨

 

 

 

-슬라이스

a=[0,10,20,30,40,50,60,70,80,90] 

a[4 :-1] -> 4번째 요소부터 맨마지막 전요소(a[-2]) 까지 출력

-> [30,40,50,60,70,80] 

a[2:8:3] [2]부터 [7]까지 3씩 증가시키면서

인덱스 생략하기

a[:7] -> 처음부터 [6]인덱스까지 가져오기

a[7:] -> [7]인덱스부터 끝까지 가져오기

a[:] -> 인덱스 전체 가져오기

 

a[: : 2] -> 처음부터 끝까지 2씩증가시키면서 가져오기 

 

슬라이스를 활용해서 원소 할당 가능. 할당된것이 적으면 그원소만,

더 많으면 전부 초과해서 바뀜

 

a[2:7:2]=['a','b','c']   [2]인덱스부터 [6]인덱스까지 2씩증가시키며 할당

-> a[2] , a[4] , a[6]에 a,b,c 할당. 증가폭을 지정하면 범위 요소개수와 할당할 요소개수가

같아야한다. 증가폭지정 안하면 상관없음.

 

del a[2:8:2] 이렇게도 사용가능. 리스트만

 

-딕셔너리 만들기

딕셔너리 ={키1: 값1, 키2: 값2}

중복된 키는 저장되지 않음.

키에는 리스트, 딕셔너리 제외 다사용가능.

x={}

x-dict()

접근 방법:

lux={'health' : 490}

lux['health']

없는키에 값할당시 해당키가 추가되고 값이 할당됨

 

-시퀀스로 출력하기

for i in reversed('python'):

   print(i,end=' ')

 

->n o h t y p

 

-append 와 extend차이

리스트안에 리스트를 append할 경우 요소1개를 추가하는것으로 간주됨.

[10,20,30,[40,50]]

그래서 len이 4임.

 

extend를 사용하면 리스트가 확장된다.

[10,20,30,40,50]

len이 5가 된다.

 

 

-특정값 제거하고 싶을 때 a.remove(20)

a=[10,20,30]

a.remove(20)

a=[10,30]

여러개 찾았으면 처음 찾은 값을 삭제한다.

 

-스택은 리스트로 구현해도 좋은데 (pop, append)

큐는 deque를 이용하는게 편하다. (append, popleft 사용)

 

-리스트에서 특정값 인덱스 구하기

a=[10,20,30,40]

a.index(20)

1

 

-특정값 개수 구하기

a.count(20)

1

 

-sort는 오름차순으로 정렬됨.

sort는 기존의 리스트를 변경해줌

sorted는 새 리스트를 생성해준다.

 

-요소 있는지 판별 

if seq:

if not seq:

 

-리스트를 2개 만드는 방법

a=[0,0,0,0]

b=a.copy()

 

-인덱스와 요소 함께 출력하기

a= [38,21,53,62,19]

 

for 인덱스, 요소 in enumerate(리스트):

 

for index, value in enumerate(a):

   print(index,value)

 

0 38

1 21

2 53

3 62

 

-시작 요소 1부터 시작하기

for index, value in enumerate(a, start=1)

      print(index, value)

 

1 38

2 21

3 53

'''

-요소의 합 구하기

sum(a)

 

 

 

-리스트 표현식에서 if문 사용하기

 

a=[i for i in range(10) if i%2==0]

 

-for문과 if문 여러번 사용

구구단

a=[i * j for j in range(2,10) for i in range(1,10) ]

 

 

-for문 1번만으로 2차원 리스트 출력하기

a=[ [10,20] , [30,40] , [500,60] ]

for x,y in a:

    print(x,y)

 

-리스트 표현식으로 2차원 톱니바퀴 리스트 만들기

a=[ [0] * i for i in [3,1,3,2,5] ]

 

[ [0,0,0] , [0] , [0,0,0] , [0,0] , [0,0,0,0,0] ]

 

 

-다차원 리스트를 복사하려면 deepcopy를 사용해야 된다.

 

 

 

 

 

 

 

 

-딕셔너리에 키,값 쌍 추가

x.setdefault('e')

키 'e'를 추가하고 값에 None을 저장한다. 키-값 쌍 추가만 가능함.

 

x.update(a=10) 해당 키 (a)가 있으면 수정하고 없으면 새로 추가한다.

삭제하기 

x.pop(키) : 특정 키값 삭제후 반환.

x.pop(키, 기본값) : 해당 키값을 삭제하고 삭제한값을 반환하는데,

키가 없으면 기본값만 반환된다.

del a[키]도 가능.

 

-x.popitem() 파이썬 3.6의 경우 마지막 키, 값을 튜플형태로 반환함.

파이썬 3.5 이하에서는 매번 삭제하는 키-값쌍이 달라짐.

clear() : 모든 키-값 쌍 삭제

get(키) : 특정키의 값 가져오기  

x.get('a')

x.get('a',0) 값이 있으면 해당 키값 반환. 없으면 기본값으로 지정한 0 반환

x.keys() : 키값만 반환

x.values() : 값들만 반환

 

dict.fromkeys(키리스트) 키리스트로 리스트 생성. 모두 None으로 저장.

keys = ['a', 'b', 'c', 'd'] 

x = dict.fromkeys(keys)

 x {'a': None, 'b': None, 'c': None, 'd': None}

 

dict.fromkeys(키리스트, 기본값)  기본값으로 딕셔너리가 생성됨.

 

-없는 키에 접근해도 에러 발생안하도록 하기

from collections import defaultdict

y=defaultdict(int)

y['z'] -> 0이나옴. 0이 기본값.

기본값 지정하기

y=defaultdict(lamda: 'python')

 

-반복문으로 키값 모두 출력하기

x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}

for key,value in x.items():

    print(key,value)

a 10

b 20

c 30

d 40

 

key나 value값만 가져오기

for key in x.keys():

for value in x.values():

 

-반복문이나 if문으로 딕셔너리 생성하기

keys=['a','b','c','d']

x={ key : value for key,value in dict.fromkeys(keys).items()      }

{'a': None, 'b': None, 'c': None, 'd': None}

 

-딕셔너리에서 쉽게 삭제하기

x = {'a': 10, 'b': 20, 'c': 30, 'd': 40}

x={  key : value for key, value in x.items() if value !=20  }

{'a': 10, 'c': 30, 'd': 40}

 

-딕셔너리 안의 딕셔너리 접근하기

terrestrial_planet = {  

 'Venus':

           {

              'mean_radius': 6051.8   ,   

              'mass': 4.8676E+24      ,    

              'orbital_period': 224.70069   

            }

}

terrestrial_planet['Venus']['mean_radius']=6051.8

 

-딕셔너리 복사하기

리스트처럼 

y=x.copy()  를 써야한다.

중첩딕셔너리의 경우 y=x.deepcopy()를 이용한다.

 

-세트 : 집합을 뜻함. 합집합,교집합, 차집합등의 연산이 가능함

a={'a','b','c'}

set은 요소의 순서가 정해져 있지 않아서 출력하면 매번 다르게 나온다..

중복안됨.

[]로 특정요소 출력 불가능

 

in 연산자로 값을 찾는다.

fruits = {'strawberry', 'grape', 'orange', 'pineapple', 'cherry'}

'orange' in fruits

True

 

-set()으로 세트 만들기

a=set('apple')

a={'e','l','a','p'}

 

빈 세트를 만드려면 a=set() 으로 해야한다. a={}로 하면 딕셔너리가 생성된다.

 

-a=frozenset('apple')

내용을 변경할 수 없는 세트 .

 

-세트 합집합  

a | b   set.union(a,b) 둘다 사용가능

-세트의 교집합 a&b  또는 set.intersection(a,b)

-세트의 차집합 a-b  set.difference(a,b)

 

-세트 대칭 차집합 a^b set.symmetric_dirrerence(a,b)

 a ^ b

{1, 2, 5, 6}

set.symmetric_difference(a, b)

{1, 2, 5, 6}

 

unit 26.2.1 부터.

unit 26 ~28

 

 unit 29.4

-return으로 여러값 전달시 default로는 튜플로 반환된다.

-리스트로 반환할 수도 있음

 

- 함수로 리스트,튜플 언패킹

-def print_numbers(a, b, c):

  print(a)

  print(b)

  print(c)

x=[10,20,30]

print_numbers(*x)

10

20

30

 

-동적으로

-def print_numbers(

*args):   for arg in args:         print(arg)

 

-키워드인수 형식 함수 사용

def personal_info(name, age, address):

     print('이름: ', name)

     print('나이: ', age)

     print('주소: ', address) 

 

personal_info(name='홍길동', age=30, address='서울시 용산구 이촌동')

인수 순서를 안맞춰도 됨.

 

-딕셔너리 언패킹 . 키값이 반드시 문자열이여야 함

x = {'name': '홍길동', 'age': 30, 'address': '서울시 용산구 이촌동'}

 personal_info(**x)

이름:  홍길동

나이:  30

주소:  서울시 용산구 이촌동

*을 1개쓰면 키값들(name, age, address) 가 출력된다

 

def personal_info(**kwargs):

    for kw, arg in kwargs.items():

           print( kw, ' : ', arg, sep=' ')

 

-언패킹

y = {'name': '홍길동', 'age': 30, 'address': '서울시 용산구 이촌동'}

personal_info(**y)

 

-def personal_info(**kwargs):    

if 'name' in kwargs:    # in으로 딕셔너리 안에 특정 키가 있는지 확인

        print('이름: ', kwargs['name'])    

if 'age' in kwargs:

        print('나이: ', kwargs['age'])

if 'address' in kwargs:

        print('주소: ', kwargs['address'])

 

-매개변수에 초기값넣기

def personal_info(name, age, address='비공개'):

...     print('이름: ', name)

...     print('나이: ', age)

...     print('주소: ', address)

초깃값이 있는 부분은 생략하고 넣을 수 있음

personal_info('홍길동',30)

 

-초깃값이 지정된 변수들은 뒤쪽에 몰아주면 된다.

 

-람다 표현식

lambda 매개변수들 : 식

lambda x : x+10

 

람다로 만든 익명 함수를 호출하려면 변수에 할당해주면 된다.

plus_ten = lambda x: x+10

 

-람다 표현식 자체 호출

(lambda x: x+10)(1)

 

-람다 표현식 안에서는 변수를 만들 수 없음

(lambda x:y=10;x+y)(1) -> 안됨

 

람다 표현식 바깥의 변수는 사용가능

y=10

(lambda x: x+y)(1)

 

-람다에 map활용하기

def plus_ten(x):

     return x+10

list(map(plus_ten, [1,2,3]   ))

 

list(map(lambda x: x+10, [1,2,3]))

 

-람다표현식으로 조건부 표현식 사용하기

lambda 매개변수들: 식1 if 조건식 else 식2

 

map을 사용해서 리스트 a에서 3의배수 문자열로 변환

a=[1,2,3,4,5,6,7,8,9,10]

list(map( lambda x: str(x) if x%3==0 else x      ,   a  ))

 

-식 여러개 쓰고 싶을 때

list(map( lambda x: str(x) if x==1 else float(x) if x==2 else x+10      ,   a  ))

식이 알아보기 힘들거같을 때는 그냥 def사용하기.

 

-map에 여러 객체 넣기

a=[1,2,3,4,5,6]

b=[2,3,4,5]

list(map(lambda x,y: x*y  ,a,b)) 이렇게도 가능

 

 

-filter 반복가능한 객체에서 특정 조건에 맞는 요소만 가져온다.

filter(함수 , 반복 가능한 객체)

def f(x):

       return x>5 and x< 10

 

a=[8,3,2,10,15,7,1,9,0,11]

list(filter(f,a))

[8,7,9]

 

list(filter(lambda x: x>5 and x<10, a))

[i for i in a if i>5 and i<10]

 

-reduce 반복가능한 객체의 각 요소를 지정된 함수로 처리한 뒤 이전 결과와 누적해서

반환하는 함수

from functools imports reduce

reduce(함수, 반복가능한 객체)

 

def f(x,y):

   return x+y

 

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

reduce(f,a)

15

 

reduce(lambda x,y : x+y, a)

15

 

 

unit 33 부터