자료구조16 6주차, 파이썬으로 sort 구현 def insertion_sort(some_list): for i in range(len(some_list)): key = some_list[i] j = i - 1 while j>=0 and some_list[j] > key: some_list[j + 1] = some_list[j] j = j - 1 some_list[j + 1] = key some_list = [11, 7, 3, 25, 5, 1] insertion_sort(some_list) print(some_list) // 1, 3, 5, 7, 11, 25 들어온 리스트의 수만큼 for문이 돈다. 첫 for문에선 j가 -1이므로 while문이 발동하지 않는다. 2번째 for문에선 j가 0과 같고, 리스트의[0]번째 요소인 11이 key값인 7보다 .. 2022. 1. 24. 6주차, 파이썬으로 팩토리얼 구하기 팩토리얼은 숫자! 로 표시한다. 뜻은 주어진 수에서 1을 빼고, 뺀 값을 원래 값에 곱하는데 그 과정을 0이 될 때까지 반복한 수다. 방법1, 재귀함수 def fact1(num): if num >0: return fact(num-1) * num # 5가 들어갈 경우 fact(4) * 5 -> fact(3) * 4 * 5 # -> fact(1) * 2 * 3 * 4 * 5 -> fact(0) * 1 *2 * 3 * 4 * 5 # -> 1 * 2 * 3 * 4 * 5 = 120 else: return 1 print(fact1(5)) // 120 처음 fact(5)가 호출되면 5가 0보다 크니 리턴으로 간다. 그런데 거기서 1 작은 fact1이 호출된다. 그걸 0까지 반복하면 1이 나온다. 그럼 fact(0).. 2022. 1. 24. 5주차 4, 중첩함수와 적용되는 지역변수 def funk1(a): def funk2(): nonlocal a a += 1 return a return funk2() funk1(2) 결과 3 nonlocal이란 로컬도, 글로벌도 아닌 윗단계에서 사용하는 로컬변수 a를 받겠다는 말이다. 만약 여기서 global a를 쓰게되면 funk1의 a가 아닌 전역변수 a를 가져올 것이다. 2022. 1. 19. 5주차 3, generator와 yield 일반적인 함수는 return값이 하나다. 하지만 제네레이터와 yield를 사용하면 여러가지의 반환을 기록하고 원할 때 사용하는 것이 가능하다. def gen(n): while n>0: yield n n -= 1 gen(10) 결과 list(gen(10)) [10, 9, 8, 7, 6, 5, 4, 3, 2, 1] 그냥 사용할 경우 제네레이터 객체로 반환되지만, 리스트등 연산을 사용하면 각 결과값을 담은 yield를 사용할 수 있다. 그리고 제네레이터는 사용되기 전까지 연산되지 않는다. 2022. 1. 19. 이전 1 2 3 4 다음