1. map

- 위에서 정의한 pow 함수와 st1이 참조하는 리스트를 이용해서 

   st2 = [1, 4, 9]를 만들려고 한다. 

- st1의 값들을 pow 함수에 넣어서 반환된 값들로 이뤄진 리스트이다. 

- 어떻게 만들 수 있을까?

 

- 값을 일일이 넣어서 pow 함수를 호출함

- 그러나 매우 불편한 코드 

 

- map은 st1의 값들을 전달하면서 pow 호출함 

- 즉, st1에 저장된 값의 수 만큼 pow 함수가 호출되며, 그것이 pow 함수가 하는 일 

- 단 이 때 map의 두 번째 전달 대상은 literable 객체여야만 함 

 

- map 함수가 하는 일

- ir은 iterator 객체이므로 for 루프에 올 수 있음 

- iterable 객체라면 무엇이든 전달 가능함 

 

-  st1과 st2에 있는 값들을 각각 더해서 다음 형태의 리스트를 만들고자 할 때

    [4, 4, 4]

- 원래라면 리스트를 각각 지정해주고 return n1 + n2 함수를 써야 함 

 

 

2. map과 람다

 - 일반적인 슬라이싱 연산

- st[ : ] : 처음부터 끝까지 모든 값을 꺼내서 리스트 생성

- st[ : :1] : 처음부터 끝까지 한 칸씩 뛰면서 값을 꺼내 리스트 생성

- st[ : :2] : 처음부터 끝까지 두 칸씩 뛰면서 값을 꺼내 리스트 생성

- st[ : :3] : 처음부터 끝까지 세 칸씩 뛰면서 값을 꺼내 리스트 생성 

 

- 그런데, 이 사실은 책에서 배운 적이 없음

 " 슬라이싱 연산에서 세 번째 값이 음수이면 값을 꺼내는 방향이 달라진다. "

 

 - 세 번째 값이 음수이면 저장 순서를 뒤집은 결과를 만들 수 있음

 

 - 슬라이싱 연산을 문자열을 뒤집는데도 사용할 수 있음

 

 - 이렇게 map을 통해 rev 함수를 정의하는 경우, 람다를 사용하면 더 간결하게 표현할 수 있음

 - 이처럼 람다 함수를 사용하면 별도의 함수를 정의하지 않아도 됨

 

 

3. filter 

 - filter 함수

     : map과 마찬가지로 함수를 인자로 전달받음 

     : 이 함수는 값을 걸러내는 기준이 됨

     : 즉, filter 함수는 값을 걸러내는 기능을 제공하는 함수 

 - ost = list(filter(is_odd, st)) : is_odd를 기준으로 st에 저장된 값들 중 일부 걸러 냄 

 - 위의 문장에서 알 수 있듯이, filter 함수의 첫 번째 인자는 True 또는 False를 반환하는 함수여야 함

 - 두 번째 인자는 리스트나 튜플과 같이 값을 저장하고 있는 iterable 객체여야 함 

 

 - 작용 기작

  ① filter는 st에 저장된 값들을 하나씩 꺼내서 is_odd에 전달함

  ② is_odd가 True를 반환하는 값들만 따로 모음 

  ③ 이 값들을 얻을 수 있는 iterator 객체를 반환함 

 

 

 

 - 10 이하의 자연수 중에서 3의 배수만 리스트에 담는 예제 

 - range 객체도 iterable 객체이므로 filter의 두 번째 인자가 될 수 있음 

 

 - 1~10의 제곱을 리스트에 담되 3의 배수만 담은 예제

 - 1 ~ 10의 제곱을 만들기 위해서 map이 사용됨

 - 이 중에서 3의 배수만을 담기 위해 filter가 사용됨 

 

 - map(lambda n: n**2, st))) : map 함수를 호출하는 부분이 먼저 진행됨 

 - 이를 통해 리스트 st에 저장된 값들의 제곱해 해당하는 값들이 만들어짐

      : [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

 - 위의 값들을 하나씩 얻을 수 있는 iterator 객체가 반환되어 다음의 filter 함수 호출이 진행됨

      : map이 반환한 iterator 객체를 아래에서 ir1이라 함 

      : fst = list(filter(lambda n: not(n % 3), ir1))

 - 위의 filter 함수를 통해서 3의 배수만 통과되어 9, 36, 81만 남게 됨 

 - 위의 값들을 하나씩 얻을 수 있는 iterator 객체가 filter 함수 호출의 결과로 반환됨

      : filter가 반환한 iterator 객체를 아래에서 ir2이라 함 

      : fst = list(ir2)

 - 결국 9, 36, 81로 이뤄진 리스트가 생성되어 변수 fst에 저장됨 

 

 

+ Recent posts