반응형
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 한 가지 방법만 있으면
간단하게 대부분의 경우에 적용되는것 같아서 유용하게 사용할 것 같다.
참고 자료
반응형
'Today I Learned > Python & Pandas' 카테고리의 다른 글
[Python] datetime, timedelta 라이브러리 사용해서 Timetable 만들기 (0) | 2020.10.14 |
---|---|
[Python] 날짜 다루기 - datetime module (0) | 2020.10.07 |
[Pandas] categorical columns to numeric - get dummies() (0) | 2020.09.28 |
[Python] Sort dict values in list (0) | 2020.09.27 |
[Python] Strip()은 공백만 제거해주지 않는다. (1) | 2020.09.23 |