나의 메모장/파이썬 나의 메모장

나의 파이썬 메모장(추가2) #map #lambda #filter

khw7876 2022. 4. 27. 22:47

적을게 많아서 2탄으로 작성을 한다..!!

#map #filter #lambda

 

1. map

people = [
    {'name': 'bob', 'age': 20},
    {'name': 'carry', 'age': 38},
    {'name': 'john', 'age': 7},
    {'name': 'smith', 'age': 17},
    {'name': 'ben', 'age': 27},
    {'name': 'bobby', 'age': 57},
    {'name': 'red', 'age': 32},
    {'name': 'queen', 'age': 25}
]
def check_adult(person):
        if person['age'] > 20:
            return '성인'
        else :
            return '청소년'
result = map(check_adult,people)
print(list(result))

>>>['청소년', '성인', '청소년', '청소년', '성인', '성인', '성인', '성인']

사실 이해하기 조금 버거웠다.

출력의 결과값은

['청소년', '성인', '청소년', '청소년', '성인', '성인', '성인', '성인']

person이라는 배개체로 people을 검사하면서, if문에 맞는 return값을 result에 입력.

list형태로 print로 출력을 한 것.

 

* result에 입력을 한 것이라, people에는 건들지 않는다!

map도 기본 예제를 통하여 알아보자!!

map(함수, 리스트)

기본적으로 함수와 리스트를 사용하여 표현!

(1) 리스트에서 하나씩 원소를 꺼내옴.

(2) 원소에 앞에 있는 함수를 적용

(3) 새로운 리스트에 적용한 원소 배열

(4) 새로운 리스트 [ 함수적용 원소1, 함수적용 원소2...]

result = map(check_adult,people)

다시 돌아가서! people이라는 리스트의 원소에 하나하나 check_adult라는 함수를 적용하고 새로운 리스트를 생성!!

 

2. lambda

people = [
    {'name': 'bob', 'age': 20},
    {'name': 'carry', 'age': 38},
    {'name': 'john', 'age': 7},
    {'name': 'smith', 'age': 17},
    {'name': 'ben', 'age': 27},
    {'name': 'bobby', 'age': 57},
    {'name': 'red', 'age': 32},
    {'name': 'queen', 'age': 25}
]

result = map(lambda person: ('성인'  if person['age'] > 20 else '청소년'), people)
print(list(result))

>>>['청소년', '성인', '청소년', '청소년', '성인', '성인', '성인', '성인']

이..게 뭐지 위에랑 같은 코드를 lambda를 이용하여 출력한 것이다.

맨 마지막에 있는 people를 돌면서, person에 ('성인~~' 코드)를 적용한다.

그리고 그 값을 result에 넣어라! 라는 뜻인데.. lambda를 더 찾아본다면

lambda 매개변수 : 표현식

이런식으로 사용!!

(lambda a,b: a + b)(1, 2)
>>> 3

적용하면 이런 식인데 a,b라는 배개변수를 사용한다고 정의를 하고, 표현식을 적용한다. 그 후 마지막에 매개변수의 값을 지정!

다시 위에서 적용한 식을 보자!

people = [
    {'name': 'bob', 'age': 20},
    {'name': 'carry', 'age': 38},
    {'name': 'john', 'age': 7},
    {'name': 'smith', 'age': 17},
    {'name': 'ben', 'age': 27},
    {'name': 'bobby', 'age': 57},
    {'name': 'red', 'age': 32},
    {'name': 'queen', 'age': 25}
]

result = map(lambda person: ('성인'  if person['age'] > 20 else '청소년'), people)
print(list(result))

>>>['청소년', '성인', '청소년', '청소년', '성인', '성인', '성인', '성인']

매개변수는 person하나를 사용, 표현식은 ('성인'  if person['age'] > 20 else '청소년') 그리고 변수의 값은!!people

이제서야.. 조금씩 이해되는 lambda...

 

3. filter

people = [
    {'name': 'bob', 'age': 20},
    {'name': 'carry', 'age': 38},
    {'name': 'john', 'age': 7},
    {'name': 'smith', 'age': 17},
    {'name': 'ben', 'age': 27},
    {'name': 'bobby', 'age': 57},
    {'name': 'red', 'age': 32},
    {'name': 'queen', 'age': 25}
]

result = filter(lambda  person : person['age'] > 20, people)
print(list(result))

>>> [{'name': 'carry', 'age': 38}, 
{'name': 'ben', 'age': 27},
{'name': 'bobby', 'age': 57},
{'name': 'red', 'age': 32}, 
{'name': 'queen', 'age': 25}]

다 똑같은 예제들이다!! map과 다른점이 있다면, map은 거쳐서 자신의 값을 받아왔다면, filter는 적용 후 값이 맞는

True인 얘들만 가져온다는 점!!

 

filter(함수, 리스트)

자 필터도 map과 마찬가지로 작성을 한다.

(1) 리스트 안의 원소를 가져옴

(2) 함수에 비교

(3) 만약에 함수의 조건의 맞다면 새로운 리스트에 넣음

(4) True를 충족한 얘들끼리 새로운 list생성

 

 

함수를 선언하기
my_station = ['야탑','모란','이매','선릉','한티','왕십리']
def station_list(A):
    for a in A:
        print(a)
        
station_list(my_station)
>>>야탑
모란
이매
선릉
한티
왕십리

def station_point(A):
    for a in A:
        if a == "선릉":
            print(a)

station_point(my_station)
>>>선릉

사실 여기서 함수안에서는 내가 A라고 적었지만, 

def station_list(station_list):

   for station in station_list:

      print(station)

이렇게 적는게 보편적이다, 다만 이렇게 단수, 복수 형태를 깨고 내가 A라고 적은 이유는

그 함수 안에서 변수를 지정해 주는것이라는 사실을 말하고 싶었다.

 

위에서 선언한 함수에 station_list(my_station)을 집어 넣어주면,

함수에서는 그 값을 A로든,station_list로든 어떠한 형태로든 같은 것을 받기 때문이다.

 결론 == 위에서 선언한 함수를 사용할 때 변수를 넣어주어서 호출하는 방식

 

class 선언하기
class post:
    id = ''
    title = ''
    author = ''
    content = ''


post.id = '1'
post.title = '첫 게시글'
post.author = 'sparta'
post.content = '나의 첫 python Class 게시글은 sparta에서'


print("id -> ", post.id)
>>> id ->  1
print("title -> ", post.title)
>>> title ->  첫 게시글
print("author -> ", post.author)
>>> author ->  sparta
print("content -> ", post.content)
>>> content ->  나의 첫 python Class 게시글은 sparta에서