새로운 리스트를 만들때 사용하는 간단한 표현식 리스트와 마찬가지로 대괄호 [ ]를 사용하여 작성
조건 넣기
만들려고 하는 원소를 표현하는 표현식으로 시작하여 뒤에 for 루프가 붙고 그뒤에 if문을 붙여 조건문을 포함한 형식을 가져올수도 있다.
[ 표현식 for 원소 in 반복 가능한객체]
[ 표현식 for 원소 in 반복 가능한객체 if문]
예제)
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]
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
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)
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)