개인 공부 후 자료를 남기기 위한 목적이므로 내용 상에 오류가 있을 수 있습니다.
2월 1일(화)
List comprehensions
List comprehension이란?
- 리스트 컴프리헨션은 새로운 리스트를 만들 때, 사용할 수 있는 간단한 표현식이며 리스트와 마찬가지로 대괄호를 사용하여 작성한다.
- 리스트 컴프리헨션은 우리가 만들려고 하는 원소를 표현하는 표현식으로 시작하여 for 루프가 뒤에 따라오는 형식을 가진다.
- 또한, 리스트 컴프리헨션에서 for문 뒤에 if문을 추가하여 조건문을 포함한 형식으로도 사용할 수 있다.
- 즉, [표현식 for 원소 in 반복가능한 객체]와 [표현식 for 원소 in 반복가능한 객체 if문]의 형식으로 사용 가능하다.
- 리스트 컴프리헨션으로 작성한 코드는 간결하고 데이터베이스를 조회하여 리스트로 만들 때 많이 사용된다.
- 또한, 일반적인 for문을 사용해서 리스트를 만드는 것보다 리스트 컴프리헨션을 사용하여 새로운 리스트를 만드는 것이 성능 측면에서 더욱 효과적이다. (리스트 컴프리헨션이 for문보다 2배정도 빠르게 실행됨)
- 하지만, 모든 상황에서 리스트 컴프리헨션을 사용하는 것이 만능은 아니며 가독성을 위해서는 여러줄의 표현식과 조건문을 사용하는 것이 리스트 컴프리헨션을 사용하는 것보다 좋은 방법이다.
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 |
댓글