Python의 list comprehension을 쓰면 로직 구현도 용이해지고 코드를 볼 때 더 읽고 이해하기가 쉬워진다. 그렇다면 list comprehension 이란??
빈리스트를 선언하고, for문으로 범위 내에 객체를 반복해서 불러내고, 리스트에 값들 추가하는 식.
>>>squares = []
>>>for i in range(10):
squares.append(i * i)
>>>squares
[0,1,4,9,16,25,36,49,64,81]
map 메소드 안에 함수와 객체를 넣으면 새로운 객체를 만든다.
txns = [1.09, 23.56]
TAX_RATE = 0.08
def get_price_with_tax(txn):
return txn * (1 + TAX_RATE)
final_prices = map(get_price_with_tax, txns)
print(list(final_prices))
[1.17720000000000002, 25.4448]
위의 첫번째 예시를 한줄로 쓸 수 있다.
squares = [i * i for i in range(10)]
print(squares)
[0,1,4,9,16,25,36,49,64,81]
빈 리스트를 선언하고 거기에 요소들을 추가하는 대신에 ,
리스트를 선언하고 그 안에 내용을 다음과 같이 한번에 쓸 수 있다.
new_list = expression for member in iterable
두번째 예시에서는 map 함수 대신 이렇게 써도 된다.
final_prices = [get_price_with_tax(i) for i in txns]
여기서 차이점은, list comprehension은 객체가 아닌 리스트를 반환한다는것.
조건이 추가되면 다음과 같이 쓸 수도 있다.
new_list = [expression for member in iterable (if conditional)]
조건을 추가하면 불필요한 값은 제거하고 원하는 값만 걸러낼 수 있다.
filter()의 역할이다.
sentence = ' the rocket came back from mars'
vowels = [ i for i in sentence if i in 'aeiou']
print(vowels)
['e', 'o','e','a','e','a','o','a']
만약 멤버 값을 바꾸고자 한다면 첫부분에 조건을 추가해도 된다.
new_list = [expression ( if conditional) for member in iterable ]
예를 들어, 음수를 0 으로 바꿔서 출력하고 싶은 예시가 있다면
original_prices = [1.25, -9.45, 10.22, 3.78, -5.92, 1.16]
prices = [ i if i>0 else 0 for i in original_prices]
print(prices)
[1.25, 0, 10.22, 3.78, 0, 1.16]