[python 기초] list comprehensions

EMMA·2022년 3월 7일
0

문제풀이를 통해 접했던 list comprehension 정리해보기


1 개념
list comprehensions는 새로운 List를 만들 때, 간결한 방법으로 만들 수 있다는 장점이 있다. append 기능까지 한번에 처리할 수 있다.

  • [ 표현식 for 원소 in 반복 가능한 객체 ]
  • [ 표현식 for 원소 in 반복 가능한 객체 if문 ]
#일반 example
odd_numbers = []
for element in range(1,11):
    if (element%2) ==1:
        odd_numbers.append(element)
        
#list comprehensions 사용
odd_numbers = [element for element in range(1,11) if (element%2)==1]

또한, list comprehensions를 활용하면 일반 for문 형태로 작성하는 것보다 실행시간을 훨씬 줄일 수 있다.
하지만 때로는 오히려 가독성이 떨어지는 경우가 있으므로, (늘 그렇듯) 적당히 잘 사용하는 것이 좋겠다. 몇 번 사용해보니, 작성자 입장에서도 이중 for문 이상으로 넘어가면 복잡해진다.

2 기타 자료형 comprehensions
list comprehensions는 다른 자료형에서도 응용 가능하며, 각 자료형 특징에 맞게 (괄호 형태, hash형 자료 등) 바꿔주면 된다.

📌 set comprehensions

my_list = [x+y for x in range(10) for y in range(10)]
print(my_list)
> [0,1,2,3,4,5...] 

my_list2 = {x+y for x in range(10) for y in range(10)}
print(my_list2)
> set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18])

set comprehensions는 set자료형이기 때문에, 중복 요소는 제거된다.

📌 dict comprehensions
key:value 형태를 사용하면, dictionary 형태의 comprehensions를 작성할 수 있다.

students = ["철수", "영희", "길동", "순희"]
students = {student:0 for student in students}
print(students)
> {"철수": 0, "영희": 0, "길동": 0, "순희": 0}

기존 데이터를 변경할 수 도 있다.

scores = {"철수": 50, "영희": 80, "길동": 90, "순희": 60, "전학생": 100}
scores = {name:score for name,score in scores.items() if name != "전학생"}
> {"길동": 90, "순희": 60, "영희": 80, "철수": 50}
내용 출처: https://wikidocs.net/22797

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

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

Answer)

cities = ["Tokyo","Shanghai","Jakarta","Seoul","Guangzhou","Beijing","Karachi","Shenzhen","Delhi" ]
new_cities = [city for  city in cities if city[0]=="S"]
print(new_cities)


3-2
다음과 같은 도시, 인구수가 튜플의 리스트로 주어졌을때, 키가 도시, 값이 인구수인 딕셔너리를 딕셔너리 컴프리헨션을 사용한 함수를 작성해 보세요.

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

Answer)

population_of_city = [('Tokyo', 36923000), ('Shanghai', 34000000), ('Jakarta', 30000000), ('Seoul', 25514000), ('Guangzhou', 25000000), ('Beijing', 24900000), ('Karachi', 24300000), ('Shenzhen', 23300000), ('Delhi', 21753486)]
city_dict = {capital:pop for capital,pop in population_of_city}
print(city_dict)
profile
예비 개발자의 기술 블로그 | explore, explore and explore

0개의 댓글