[Python] List Comprehension | map | lambda

은경·2022년 3월 18일

[Python / Django]

목록 보기
5/5

🗺 map 함수


map (function, iterable)

  • 첫번째 매개변수 : 함수
  • 두번째 매개변수 : 반복 가능한 자료형 (리스트,튜플 등)
  • map함수의 반환 값은 map객체 이기 때문에 해당 자료형을 list 혹은 tuple로 형 변환시켜주어야 함.
  • 두번째 인자로 들어온 iterable을 첫 번째 인자로 들어온 function에 하나씩 집어넣어서 function을 수행하는 함수.
  • map(적용시킬 함수, 적용할 값들)
  • input().split()의 결과가 문자열 리스트이기 때문에 map 함수를 사용할 수 있음

map 함수 사용 예시

1️⃣ 주어진 리스트에 값을 각각 +1한 새로운 리스트 만들기

my_list = [1,2,3,4]
result_for = []
result_map = []

# for문 사용
for number in my_list:
	result_for.append(number+1)
    
# map함수 사용
def add(number):
	return number+1
result_map = list(map(add, my_list))

print(result_for) # [2,3,4,5]
print(result_map) # [2,3,4,5]

2️⃣ 리스트의 모든 요소 정수로 변환하기

arr_for = [1.2, 2.3, 3.4, 4.5]
arr_map = [1.2, 2.3, 3.4, 4.5]

# for문
for i in range(len(arr_for)):
	arr_for[i] = int(arr_for[i])

# map함수
arr_map = list(map(int, arr_map))

print (arr_for) # [1,2,3,4]
print (arr_map) # [1,2,3,4]

ƛ lambda 함수


lambda 매개변수 : 표현식

  • 익명 함수
  • 코드의 간결함, 메모리의 절약을 위해 사용
  • def를 이용해 함수객체가 변수에 담기면 메모리에 올라가서 변수를 통해 자신이 호출되기를 기다리게됨 -> 메모리 낭비
  • 한번만 사용될 함수는 람다로 호출하는 것이 효율적이다.
  • return키워드 없이 자동으로 return해줌

lambda 함수 사용 예시

1️⃣ def와 비교

# def키워드이용
def add2(x,y):
	return x+y
print (add2(10,20)) # 30

# 람다 이용 
# 람다함수도 객체이기 때문에 정의와 동시에 변수에 담을 수 있다.
n = (lambda x,y:x+y)(10,20)
print (n) # 30

2️⃣ 다른 함수와 함께 사용map,filter,sorted

>>> list(map(lambda x: x **3, range(5))) #3제곱
[0, 1, 8, 27, 64]

>>> list(filter(lambda x: x<8, range(10))) 
[0, 1, 2, 3, 4, 5, 6, 7]

>>> list(filter(lambda x : x%2, range(20))) # 홀수만 반환
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
# filter는 참인 값만 반환하기 때문에 나머지가 0(=거짓)이면 반환하지 않음
#### 문자열 길이 공백 무시하고 정렬
def my_key(string):
     return len(string.strip())
     
target = ['  cats ', ' tiger ', '    dog', 'snake   ']
print(sorted(target, key=my_key)) 
# ['    dog', '  cats ', ' tiger ', 'snake   ']

#### 람다 사용
target = ['  cats ', ' tiger ', '    dog', 'snake   ']
print(sorted(target, key=lambda x : len(x.strip())))
# ['    dog', '  cats ', ' tiger ', 'snake   ']
  • Python에서 strip()을 이용하면 문자열에서 특정 문자를 제거함.
  • 인자를 전달하지 않으면 공백을 제거함.

📌sort 함수는 리스트명.sort( ) 형식으로 리스트형의 메소드 이며 리스트 원본값을 직접 수정함.
📌sorted 함수는 sorted( 리스트명 ) 형식으로 내장 함수이며 리스트 원본 값은 그대로이고 정렬 값을 반환.


🌸 List Comprehension


  • 대괄호[ ]로 감싸고 내부에 for문과 if 문을 사용하여 반복하며 조건에 만족하는 것만 리스트로 생성
  • list외에도 Set, Dict 자료형으로 사용되는 컴프리헨션
  • 직관적이며 코드 여러줄을 한줄로 줄일 수 있음.
  • 그냥 리스트를 생성하고 반복문과 조건문을 사용하는 것 보다 속도가 빠름

수식, 함수 적용

# 수식 적용
[i*10 for i in range(5)] # [0,10,20,30,40]

# 함수 적용
def test(x):
    x = str(x)+'a'
    return x
 
[test(i) for i in range(5)] # [0a,1a,2a,3a,4a]

조건문 사용

  • if문만 사용시 오른쪽에 씀
  • if else문 사용시 왼쪽에 씀
 # 오른쪽에 if문 사용
[i for i in range(5) if i%2==0]

 # 왼쪽에 if문 사용(else 같이 사용)
[i if i%2==0 else 'odd' for i in range(5)]

이중 for문 사용

# 리스트 생성 후 이중 for문
li=[]
for i in range(2):
    for j in range(3):
        li.append((i,j))
        
# 리스트 컴프리핸션 
[(i,j) for i in range(2) for j in range(3)]
# [(0,0),(0,1),(0,2),(1,0),(1,1),(1,2)]

참고 자료 (Reference)


https://wikidocs.net/64
https://blockdmask.tistory.com/531
https://www.daleseo.com/python-map/
https://wikidocs.net/22804
https://bio-info.tistory.com/28

profile
Python 서버 개발자

0개의 댓글