본문 바로가기
기타

TIL - 22.02.01

by DGK 2022. 2. 2.

 

개인 공부 후 자료를 남기기 위한 목적이므로 내용 상에 오류가 있을 수 있습니다.

 

2월 1일(화)


List comprehensions

List comprehension이란?

 

  1. 리스트 컴프리헨션은 새로운 리스트를 만들 때, 사용할 수 있는 간단한 표현식이며 리스트와 마찬가지로 대괄호를 사용하여 작성한다.
  2. 리스트 컴프리헨션은 우리가 만들려고 하는 원소를 표현하는 표현식으로 시작하여 for 루프가 뒤에 따라오는 형식을 가진다.
  3. 또한, 리스트 컴프리헨션에서 for문 뒤에 if문을 추가하여 조건문을 포함한 형식으로도 사용할 수 있다.
  4. 즉, [표현식 for 원소 in 반복가능한 객체]와 [표현식 for 원소 in 반복가능한 객체 if문]의 형식으로 사용 가능하다.
  5. 리스트 컴프리헨션으로 작성한 코드는 간결하고 데이터베이스를 조회하여 리스트로 만들 때 많이 사용된다.
  6. 또한, 일반적인 for문을 사용해서 리스트를 만드는 것보다 리스트 컴프리헨션을 사용하여 새로운 리스트를 만드는 것이 성능 측면에서 더욱 효과적이다. (리스트 컴프리헨션이 for문보다 2배정도 빠르게 실행됨)
  7. 하지만, 모든 상황에서 리스트 컴프리헨션을 사용하는 것이 만능은 아니며 가독성을 위해서는 여러줄의 표현식과 조건문을 사용하는 것이 리스트 컴프리헨션을 사용하는 것보다 좋은 방법이다.

 

List comprehensions 예시

예시(1)

# 리스트 컴프리헨션을 사용하지 않은 경우

odd_numbers = [ ]
for element in range(1,11):
    if (element % 2) == 1:
        odd_numbers.append(element)
print(odd_numbers)

# 출력 : [1, 3, 5, 7, 9]

 

# 리스트 컴프리헨션을 사용하는 경우

list_comprehension = [ element for element in range(1,11) if (element % 2) == 1 ]
print(list_comprehension)

# 출력 : [1, 3, 5, 7, 9]

 

예시(2)

# 리스트 컴프리헨션과 일반 for문의 새로운 리스트 생성 성능비교

import timeit

def for_loop():
    num_list = []
    for i in range(1000):
        num_list.append(i)

def list_comprehension():
    num_list = [ i for i in range(1000) ]

if __name__ == "__main__":
    time1 = timeit.Timer("for_loop()", "from __main__ import for_loop")
    print("for loop time = ", time1.timeit(number=1000), "milliseconds")

    time2 = timeit.Timer("list_comprehension()", "from __main__ import list_comprehension")
    print("list_comprehension time = ", time2.timeit(number=1000), "milliseconds")
    
    
'''
출력 :
for loop time =  0.09745711996220052 milliseconds
list_comprehension time =  0.06943844095803797 milliseconds

'''

 

예시(3)

# 리스트 컴프리헨션을 사용하는 경우

cities = [
    "Tokyo", "Shanghai", "Jakarta",
    "Seoul", "Guangzhou", "Beijing",
    "Karachi", "Shenzhen", "Delhi"
    ]

def list_comprehension(params):
    res = [param for param in params if param[0] != 'S']
    print(res)
    
list_comprehension(cities)

# 출력 : ['Tokyo', 'Jakarta', 'Guangzhou', 'Beijing', 'Karachi', 'Delhi']

 

예시(4 : 딕셔너리 컴프리헨션)

# 딕셔너리 컴프리헨션을 사용하는 경우

population_of_city = [
    ('Tokyo', 36923000),
    ('Shanghai', 34000000), 
    ('Jakarta', 30000000), 
    ('Seoul', 25514000), 
    ('Guangzhou', 25000000), 
    ('Beijing', 24900000), 
    ('Karachi', 24300000), 
    ('Shenzhen', 23300000), 
    ('Delhi', 21753486)
    ]

def dict_comprehension(params):
    res = {param[0]: param[1] for param in params}
    print(res)

dict_comprehension(population_of_city)


'''
출력 :
{'Tokyo': 36923000, 'Shanghai': 34000000, 'Jakarta': 30000000,
'Seoul': 25514000, 'Guangzhou': 25000000, 'Beijing': 24900000,
'Karachi': 24300000, 'Shenzhen': 23300000, 'Delhi': 21753486}

'''

 

 

'기타' 카테고리의 다른 글

TIL - 22.02.03  (0) 2022.02.03
TIL - 22.02.02  (0) 2022.02.02
TIL - 22.01.31  (0) 2022.01.31
TIL - 22.01.30  (0) 2022.01.30
TIL - 22.01.29  (0) 2022.01.29

댓글