TIL.list comprehensions

jeong_hyeon·2022년 3월 5일
1

TIL

목록 보기
10/22

새로운 리스트를 만들때 사용하는 간단한 표현식 리스트와 마찬가지로 대괄호 [ ]를 사용하여 작성
조건 넣기

만들려고 하는 원소를 표현하는 표현식으로 시작하여 뒤에 for 루프가 붙고 그뒤에 if문을 붙여 조건문을 포함한 형식을 가져올수도 있다.

[ 표현식 for 원소 in 반복 가능한객체]

[ 표현식 for 원소 in 반복 가능한객체 if문]

예제)

  1. 1~ 10까지를 가지는 리스트를 만들자
new_list = [x for x in range(1,11)]
print(new_list)

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

위의 표현식을 컴프리헨션을 적용안하고 사용한다면?

new_list = [] 
for i in range (1,11):
	new_list.append(i)
print(new_list) 

#[1,2,3,4,5,6,7,8,9,10]
  1. 1~10까지 숫자중 홀수만을 가지는 리스트
result = [i for i in range(1,11) if i % 2 == 1]
print(result)

#[1, 3, 5, 7, 9]

for 루프문과 컴프리핸션 속도 차이

import timeit

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

def li_comprehension():
    num_li = [i for i in range(1000)]

if __name__ == "__main__":

    time1 = timeit.Timer("for_loop()", 'from __main__ import for_loop')
    time2 = timeit.Timer('li_comprehension()', 'from __main__ import li_comprehension')

    print("for loop time", time1.timeit(number=1000), 'milliseconds')
    print("comprehension loop time", time2.timeit(number=1000), 'milliseconds')

위의식은 timeit을 이용한 계산속도의 차이를 보여주는 식이다

위의 결과는


for loop time 0.04338533303234726 milliseconds
comprehension loop time 0.015485333045944571 milliseconds

로 컴프리핸션이 더빨리 실행 된다는것을 확인할수있다.

Assignmentas

  1. 다음과 같은 도시목록의 리스트가 주어졌을때, 도시이름이 S로 시작하지 않는 도시만 리스트로 만들 때 리스트 컴프리헨션을 사용하여 함수를 작성해 보세요.

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

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

result = [i for i in cities if i[0] != 'S']
print(result)

  1. 다음과 같은 도시, 인구수가 튜플의 리스트로 주어졌을때, 키가 도시, 값이 인구수인 딕셔너리를 딕셔너리 컴프리헨션을 사용한 함수를 작성해 보세요.
population_of_city = [('Tokyo', 36923000), ('Shanghai', 34000000), ('Jakarta', 30000000), ('Seoul', 25514000), ('Guangzhou', 25000000), ('Beijing', 24900000), ('Karachi', 24300000 ), ( 'Shenzhen', 23300000), ('Delhi', 21753486) ]
result ={key:value for key,value in population_of_city}
print(result)

0개의 댓글