Today I Learned/Python & Pandas

[Python] List Comprehension

하나719 2020. 10. 6. 11:31
반응형

List Comprehension으로 할 수 있는 것

for문과 if문을 사용해서, 어떤 리스트안에서 특정 조건을 만족하는 리스트를 새로 구성할 수 있다.

for문을 돌면서 if 문으로 조건을 검사해서 append() 함수로 값을 리스트에 추가하는 것과 동일한 역할을 하는데, 아주 간단하게 표현된다.

 

input값 계산해서 list 만들기 

두가지 방법은 output이 동일하다.

# 방법1. for 문
s = []
for x in range(10):
	s.append(x ** 2)

# 방법2. list comprehension
s = [x ** 2 for x in range(10)]

output: s = [0, 1, 4, 9, 16, 26, 36, 49, 64, 81]

 

for 문 + if 문 한줄로 만들기

문제: 0부터 9까지 짝수인 수만 제곱해서 new_list로 추가하기

numbers = [0,1,2,3,4,5,6,7,8,9]

#방법1. for and if
new_list = []

for n in numbers:
    if n%2==0: #짝수 조건 검사
        new_list.append(n**2) #조건에 맞을경우 append 함수로 new_list에 제곱해서 추가

#방법2. list comprehension
new_list = [n**2 for n in numbers if n%2==0] 

output: new_list = [0, 4, 16, 36, 64]

lambda + map() 대체하기

문제: kilometer 단위를 feet 단위로 바꿔주기

kilometer = [39.2, 36.5, 37.3, 37.8]

#방법1. map + lambda
feet = map(lambda x: float(3280.8399)*x, kilometer)

#방법2. list comprehension
feet = [float(3280.8399)*x for x in kilometer]

output: feet = [128608.92408000001, 119750.65635, 122375.32826999998, 124015.74822]

 

lambda + filter() 대체하기

문제: 2의 배수만 뽑기

feet = [2,3,4,5,6,7]

#방법1. filter + lambda
uneven = list(filter(lambda x: x%2==1, feet))

#방법2. list comprehension

uneven = [x for x in feet if x%2==1]

output: [3,5,7]

 

If  else 써서 list 만들기

문제: 5보다 크면 + 100, 나머지는 그대로 return

이 방법은 문법이 살짝 다른데, if 만 쓸때는 for 문 뒤에 넣어주었는데, if else 로 조건을 2개 넣어줄 때는 for 문보다 앞에 넣어준다.

문법: [ 조건이 참일 때 if 조건 else 조건이 거짓일 때 for문] 

num = [1,2,3,4,5,6,7,8,9,10]

#방법1. if else
n = []
for x in num:
	if x < 5:
    	n.append(x+100)
    else:
    	n.append(x)


#방법2. list comprehension
n = [x+100 if x < 5 else x for x in num]
    	

 

조건을 검사해서 List를 만들수있는 방법이 정말 다양한데, list comprehension 한 가지 방법만 있으면 

간단하게 대부분의 경우에 적용되는것 같아서 유용하게 사용할 것 같다.


참고 자료

List Comprehension Tutorial 

 

(Tutorial) Python List Comprehension

Learn how to effectively use list comprehension in Python to create lists, to replace (nested) for loops and the map(), filter() and reduce() functions, ...!

www.datacamp.com

 

 

반응형