ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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]

    https://replit.com/@wh3308/jaegwineun-dolaoneun-geoya

Designed by Tistory.