1. lambda 익명 함수: 한줄로 구현하게 해주는 함수 (with map, reduce)
일반적인 함수는 아래처럼 구현하고 호출한다.
def hap(x,y):
return x+y
hap(2,5) # 2+5 = 7 return
lambda 함수를 이용하여 함수를 구현하면 아래처럼 사용 가능하다.
(lambda x,y: x+y)(2,5) # return 7
lambda함수 내에서 조건문 사용 가능하다.
a = lambda x, y: x*y if x>0 else y
a(4, 8) # 32
a(-4, 8) # 8
다른 내장함수와의 활용
1. map
rambda는 map 함수와 함께 쓰면 기능이 확장될 수 있다.
map 이란 map(함수, 리스트) 형태로 사용이 가능하다.
list(map(lambda x: x**2, range(5)))
[0, 1, 4, 9, 16]
2. reduce
rambda는 reduce(함수, 시퀀스) 형태로 사용 가능하다.
여기서 시퀀스란 문자열, 리스트, 튜플 등을 의미한다.
reduce(lambda x, y: x+y, range(5))
0+1+2+3+4 = 10 return
reduce(lambda x, y: y+x, 'abcde')
edcba 역순으로 return
3. filter
rambda는 filter (함수, 리스트) 형태로 사용 가능하다.
리스트에 들어있는 원소들을 함수에 적용시켜 결과가 참인 값들로 새로운 리스트를 만들어 준다.
list(filter(lambda x: x<5, range(10))
[0, 1, 2, 3, 4] # 5 미만의 값만 필터링 됨.
list(filter(lambda x: x%2 != 0, range(10)))
[1, 3, 5, 7, 9] # 홀수 값만 필터링 됨.
4. max, min
key를 이용해 리턴할 값의 기준을 정한다.
strings = ["abc", "abcdef", "abcedfgh"]
longest = max(strings, key = lambda x:len(x))
numbers = [1, 10, 100, 1000]
biggest = max(numbers, key = lambda x:x))
2. zip 데이터를 엮어주는 함수
zip은 파이썬 내장함수로 데이터를 엮을 때 사용한다.
아래 코드는 numbers 리스트와 letters 리스트를 zip() 함수의 인자로 넘겨서 호출 후에,
for문으로 zip() 함수의 반환값을 대상으로 루프를 돌면서 튜플을 차례로 출력한다.
numbers = [1, 2, 3]
letters = ['A', 'B', 'C']
for pair in zip(numbers, letters):
print(pair)
(1, 'A')
(2, 'B')
(3, 'C')
zip() 기능:
1. 여러 그룹의 데이터를 반복문 한번에 처리할 수 있음!! 병렬처리 가능!!!
for number, upper, lower in zip("12345", "ABCDE", "abcde"):
print(number, upper, lower)
1 A a
2 B b
3 C c
4 D d
5 E e
2. zip() 함수를 이용해 upzip 가능하다.
zip()
numbers = (1, 2, 3)
letters = ('A', 'B', 'C')
pairs = list(zip(numbers, letters))
print(pairs)
[(1, 'A'), (2, 'B'), (3, 'C')]
unzip
pair = [(1, 'A'), (2, 'B'), (3, 'C')]
numbers, letters = zip(*pairs)
numbers # (1,2,3)
letters # ('A', 'B', 'C')
3. zip() 과 2개의 리스트 이용해 딕셔너리 생성 가능
keys = [1, 2, 3]
valuse = ['a', 'b', 'c']
dict(zip(keys, values))
# {1:'A', 2:'B', 3:'C'} return
dict(zip(["year", "month", "date"],[2020, 8, 7]))
# {"year":2022 , "month": 8, "date": 7} return
# 주의사항
길이가 동일한 리스트를 사용하지 않으면, 긴 쪽의 인자들이 버려질 수 있다.
3. queue (PriorityQueue...)
4. heapq
5. startswith( ) 와 endswith( )
startswith( ) : 시작하는 문자열이 동일하면 True, 아니면 False를 반환한다.
endswith( ) : 끝나는 문자열이 동일하면 True, 아니면 False를 반환한다.
file_name = "01-stduent.jpg"
file_name.startwith("01") # True
file_name.endwith(".jpg") # False
6. replace( ' * ', ' ? ' )
replace(바꿀 대상, 바꾸려는 문자열)
file_name = "01-student.jpg"
file_name.replace(".jpg", ".png")
7. count(개수를 알고자 하는 문자)
['a', 'ab','abc'].count('a') # 1
'ababaaa'.count('a') # 5
8. compile(query)
9. try: ~ except 예외처리
try:
실행할 코드
except:
예외가 발생했을 때 처리하는 코드
try:
x = int(input('나눌 숫자를 입력하세요: '))
y = 10 / x
print(y)
except: # 예외가 발생했을 때 실행됨
print('예외가 발생했습니다.')
10. 슬라이싱
역순으로 출력하기 위해서는 step을 -1로 지정하면 된다
a[ : : -1]
'코딩테스트 > 알고리즘 (Python) ★★★' 카테고리의 다른 글
[백준-실버3] 다이나믹프로그래밍-boj11726-2xn타일링 (1) | 2022.11.15 |
---|---|
[코테 대비 2] 파이썬 입출력 총정리 (0) | 2022.07.27 |
[코테 대비 1] 파이썬 자료구조 총정리(list, tuple, dict) (0) | 2022.07.27 |
[알고리즘10] 백트래킹 (N Queen) (0) | 2022.07.26 |
[알고리즘8] 그래프 고급탐색 (최단경로/다익스트라) feat.우선순위큐 (0) | 2022.07.26 |