-
59 - (파이썬) 조기 리턴과 리스트 평탄화하는 재귀 함수study with Q - 파이썬 2024. 6. 23. 12:21
# 조기 리턴
memo = {1: 1, 2: 1} def fbmm(n): if n in memo: return memo[n] elif n >= 3 : temporary = fbmm(n-1) + fbmm(n-2) memo[n] = temporary return temporary print(fbmm(5))
파이썬은 조건문이나 반복문을 사용하게 되면 들여쓰기가 들어가게 되는 데, 요걸 줄이는 것이 힘이 많이 들어간다.
→ 위의 코드에서 같은 실행값을 얻지만 조건문 하나가 줄어드는 형식으로 바꾸면 다음과 같다.
memo = {1: 1, 2: 1} def f(n): if n in memo: return memo[n] temp = f(n-1) + f(n-2) memo[n] = temp return temp print(f(5))
∵ if 조건문에 걸렸을 때는 return meno[n]을 하면서 코드의 흐름이 종료되기 때문이다. 즉, if 조건문에 걸리면 return 코드만 실행이 되고 이 조건문에 걸리지 않는 다면 아래 코드만 실행된다.
라테는 말이야...더보기함수 실행 마지막 부분에 return을 넣었단 말이야..
memo = {1: 1, 2: 1} def fbmm(n): if n in memo: return memo[n] elif n >= 3 : temporary = fbmm(n-1) + fbmm(n-2) memo[n] = temporary return temporary print(fbmm(50))
여기서는 return memo[n]와 return temporary가 함수 마지막이니 여기에 return을 넣곤 했단다.
그래서
memo = {1: 1, 2: 1} def fbmm(n): if n in memo: return memo[n] temporary = fbmm(n-1) + fbmm(n-2) memo[n] = temporary return temporary print(fbmm(50))
그런데 위의 코드에서 memo[n]은 함수 실행 마지막이 아니니 return을 넣으면 안되는데 요즘 mz들은 함수 중간에 아무때나 return을 넣어버리면서 이걸 조기리턴이라고까지 부른다고 하지 뭐냐 껄껄
코드가 어떻게 되려고 그러는 지 어휴# 리스트 평탄화
: 중첩된 리스트가 있을 때 중첩을 모두 제거하고 풀어서 1차원 리스트로 만드는 것을 의미함4장에서 2차원 리스트 평탄화를 했던 게 있는데...
(넌 공부를 안하고 넘어갔었지... 지금이라도 복습하거라)더보기A = [1,2,[3,4],5,[6,7],[8,9]] B = [] for a in A: if type(a) == list: for i in a: B.append(i) #B = B + [i] 또는 B += [i] else : B.append(a) #B = B + [a] 또는 B += [a] print(f"""{A}를 평탄화하면 {B}가 나와요.""") >>> [1, 2, [3, 4], 5, [6, 7], [8, 9]]를 평탄화하면 [1, 2, 3, 4, 5, 6, 7, 8, 9]가 나와요.
4장에서 했던 것처럼 하면 요렇게 한 껍데기만 벗겨진다
def faltten(data): output = [] for item in data: if type(item) == list: #output += item 이라고 썼던 것을 output.extend(item) else : output.append(item) return output data = [[1,2,3],[4,[5,6]],7,[8,9]] print(faltten(data)) >>> [1, 2, 3, 4, [5, 6], 7, 8, 9]
그럼 나머지 껍데기도 벗겨내기 위해서
def faltten(data): output = [] for item in data: if type(item) == list: output.extend(faltten(item)) #요 부분이 재귀 함수를 이용한 거 else : output.append(item) return output data = [[1,2,3],[4,[5,6]],7,[8,9]] print(faltten(data)) >>> [1, 2, 3, 4, 5, 6, 7, 8, 9]
'study with Q - 파이썬' 카테고리의 다른 글
61 - (파이썬) 콜백함수, map/filter 함수 (0) 2024.07.01 60 - (파이썬) 튜플, 이뮤터블 자료, 뮤터블 자료 (0) 2024.06.24 58 - (파이썬) 재귀 함수, 피보나치 수, 메모화(memorization) (0) 2024.06.19 57 - (파이썬) 재귀 함수, 팩토리얼 연산 (0) 2024.06.19 56 - (파이썬) 메모리 구조 : 함수의 값 복사와 레퍼런스 복사 (1) 2024.06.15