728x90

015. 함수 filter, lambda

 

 

일단 필터함수랑 람다함수 각각 먼저 알아보자

 

1.filter()

  • 걸러낸다는 뜻. 함수도 동일한 의미
  • 두번째 인수(반복 가능한 자료형) 첫 번째 인수(함수명)에 입력되었을 때,  '반환 값이 참인 것만 걸러 내서 돌려준다.'

 

1)형태

filter(function, iterable)
filter(함수명, 반복가능한 자료형)

 

2)세부 내용

filter(함수명, 반복가능한 자료형)

  • 함수명(function) : True or False로만 반환
  • 반복가능한 자료형(iterable) : 함수에 차례로 들어갈 반복 가능한(iterable) 인수(instance)
instance
클래스로 만든 객체

 - 객체와 구분, 어떤 클래스의 객체인지 관련지어 얘기할 때 인스턴스라고 부른

 

3)특징

  • 여러 데이터 중에 일부만 추려낼 때 사용
  • 따라서, 보통 list,tuple을 대상으로 주로 사용함
  • filter()는 filter값으로만 리턴함
  • 결과값이 참인 것만 결과값을 돌려줌. False는 다 버리고 True만 줌
  • filter() 함수의 결과값을 list로 변환하는 가장 쉬운 방법은 list() 내장 함수를 사용하는 것.
  • 마찬가지로 tuple도 내장함수 tuple() 사용

 

이제 직접해보자

보다시피 filter()가 filter값으로 낸다는 의미를 알것이다. 이상한 숫자와 알파벳이 섞여있다

이를 사람이 알기 쉽게 변환할 수 있도록 하는게 list나 tuple로 바꿔주는 것이다. 그래서 아래에서 list()를 추가하였고, 

0보다 큰 [1,2] 값을 리턴한 것.

 

filter() 함수를 쉽게 한마디로 설명하자면 def 함수와 연계하여 함수의 조건을 충분하는 True값만 걸러서 추출한다고 생각하면 되겠다

 


2.lambda

def와 동일한 역할을 하는 녀석

1)형태

lambda 매개변수1,매개변수2... : 매개변수를 이용한 표현식

 

* 매개변수(parameter)와 인자(arguement)란?

def add(x,y):  # (x,y)가 매개변수(parameter)
	return x + y
    
z = add(4,-5)  # (4,-5)가 인자(argument)
print(z)

위의 def 함수를 lambda 함수로 전환해보면,

# lambda 함수로 변환

add = lambda x,y : x + y
z = add(4,-5)
print(z)

실제로 해보면, 결과값 또한 똑같게 잘나온다

 

2)특징

언제 사용하는가?

def를 사용할 필요없이 간단하거나, def를 사용할 수 없는 곳에 주로 사용

위의 filter() 함수식은 람다함수를 사용하면 더 간편하게 코드 작성가능

 

 

 

728x90
반응형
728x90

014. error message - list is not callable

 

에러 종류 : type 에러

발생 이유 :

1)함수명과 변수명이 중복 되었을 때

2)앞에서 선언한 변수명을 밑에서 함수로 호출할려고 하면 둘의 명칭이 겹치면서 오류

 

해결법 : 함수명과 겹치는 변수가 있는지 다른 겹치는 네이밍이 있는 확인할 것!

 

728x90
반응형
728x90

013. 결과값과 변수

 

위에서 myDiv는 나누기를 하고 난 후 몫과 나머지를 구하는 식인데 결과값이 2,1이다

a,b = 결과값 2, 1이

a=2, b=1로 들어간다

 

변수가 두개 있는 것 같은 것에서 멘붕왔던 때를 기억하며...

왼쪽꺼는 왼쪽으로 오른쪽꺼는 오른쪽으로 들어가는 걸 알아두자!

 


 

이번 개념은 간단하면서 중요하다. 추후에 알고리즘에서도 사용되는

a=b
b=c
c=a

이 개념에도 이어지기 때문인데, 처음 저걸 들었을 때 진짜 멘붕오고 무슨 말인지...ㄷㄷ

나중에 차차 또 알아보자. 일단 이런게 있다는 것만 알아두고 skip

 


 

❓튜플이 소괄호 생략하고 써도 되는데 혹시 무슨 관련이...?❓

❓ 아니면 구분하는 방법을 알아둬야 할 것 같기도 하고?❓

그래서 한번 type()를 찍어보았다.

변수를 복수로 지정할꺼면 넣을 값이랑 변수의 수를 맞춰줘야하고,

아래 에러메세지에서처럼 변수가 2개면 2개의 값을 넣어달라고 한다.

변수명 한개에 콤마( , )로 구분해주면 소괄호를 생략해도 튜플로 인식한다

 

 

❓변수명이 2개인데 tuple을 쓰고 싶다면❓

z값에 튜플 (1,2) 값이

y값에 튜플 (2,3) 값이 잘 들어가있다

결론 : 가능!

 

*ipynb 파일(주피터)에서 그냥 변수명만 쳐도 프린트함수처럼 출력이 되는데

print()를 써서 출력하는거랑 이상하게 결과값이 좀 다르게 나온다. 이전 포스팅에서 좀 다뤄봤는데 

아직도 이해가 다 안되서 죽겠다. 여튼 이런게 있다고 알고 넘어가자!

 

 

728x90
반응형
728x90

012. for문 - 행열이해 및 1,2차원 list생성법


행열이 각각 가로인지 세로인지 너무 햇갈렸다. 줄을 세운다해도 가로로 세울수도 세로로 세울 수도 있으니 줄개념도 아리송하고 오와 열을 맞춰서 서라 뭐 이런말로 기억하는 사람도 있다는데 나는 헷갈리더라.
이럴 때는 아테네 신전에 기둥을 생각해보자 이게 영어로 컬럼(column)인데 자연스럽게 세로인걸 알 수 있다. 나는 이렇게 해서 기억했으니 도움 되길 바란다.

range()

for문에 많이 쓰는 range는 숫자만 가능
for문 이외에도 40줄에서처럼 list(range(5))로 리스트를 만들수도 있다

.append()

추가시킬려는 변수명.append(추가할 값을 받는 변수명. 위에서는 for문의 변수)

2차원 리스트

2차원 리스트란 리스트 안에 하나의 값이 리스트로 이루어진 즉, 리스트 안에 리스트가 존재하는 리스트를 말한다.
나중가면 마치 수학의 행렬처럼 위의 예제에서 나왔듯이 2차원 리스트를 세로로 쭉 나열에서 잘 쓴다고한다.
- 1차원 리스트 : a = [1,2,3]
- 2차원 리스트 : a = [1,2,[3,4]]
위에서
1차원 리스트에서 마지막 값이 5인데,
2차원 리스트는 마지막 값이 [5,6]이다

1차원 리스트 마지막값과 2차원 리스트 마지막 값을 각각 type() 함수를 통해 찍어보면,
1차원은 평범한 숫자형
2차원은 list임을 알 수 있다

728x90
반응형
728x90

011. for문 - list와 for문의 변수 작동원리 이해

 

 

종종 for문이 반복되면서 이게 식안에서 어떻게 작동되는지 햇갈릴 때가 있었다. 어떤 때는 잘 알겠고 어떤 때는 햇갈려서 뭘 모르는지 잘모르는 상태였는데 계속 보다보니 

range를 사용하면 숫자여서 이해하기가 좀 쉬웠는데 변수명이 들어간다거나 다른 자료형이 들어가면 햇갈리는 걸 발견했고, 어떻게 작동하는지 방법을 찾아내서 팁을 공유할까한다.

 

<문장 안에서 해당 코드가 어떻게 작동하는지 확인하는 팁!>

print() 함수를 알고 알고 싶은 코드 중간중간에 넣어서 해당 값이 어떤건지 출력하게끔해서 중간중간 값을 체크하면 어떻게 돌아가는지 알 수 있다. for문 뿐만 아니라 다른 곳에서 가능!!

 

 

 

728x90
반응형

+ Recent posts