Programming/python

Udemy Python Boot Camp Section 26 정리 | 리스트 컴프리헨션과 NATO 알파벳 List Comprehension and NATO Alphabet

자히Zahi 2024. 12. 17. 23:09

* 이 글은 필자가 자신이 배운 내용을 정리하기 위한 것이며, 결코 Udemy 강의를 결제하지 않은 타인의 학습을 고려하여 작성되지 않았습니다.

* 이 글을 학습에 활용하기를 원하신다면, Udemy에서 '[한글자막] Python 부트캠프 : 100개의 프로젝트로 Python 개발 완전 정복' 강의를 구매하시는 것을 권장드립니다.

 

리스트 컴프리헨션은 python외의 다른 언어에 존재하지 않는 독특한 기능이다. (강의에서 그대로 말한다.)

new_list = [new_item for item in list(if test)]

 

라는 패턴을 가지며, 목적은 코드를 간략하게 만드는 것이다.

여기에서 list는 새로운 리스트를 만들기 위해 필요한 기존의 리스트, item은 그 리스트 안의 요소, new_item은 새로운 아이템(리스트의 요소)를 정의하는 식이다. (반드시 필요한 요소가 아닌 if는 잠시 제쳐두고 나머지 부분만 생각하자.)

 

예를 들어 [2, 3, 4]라는 수열에서 모든 요소에 1을 더하고 싶다면 어떻게 하면 될까?

만약 리스트 헨션을 사용하지 않는다면, 이렇게 표현할 것이다.

numbers = [2, 3, 4]
new_list = []
for n in numbers :
    add_1 = n + 1
    new_list.append(add_1)

 

당연하지만 원한다면 add_1을 따로 만들지 않고 new_list에 n+1을 바로 추가할 수도 있을 것이다. 하지만, 그래도 세 줄이 더 필요하다.

 

이때 리스트 헨션을 사용한다면

numbers = [2, 3, 4]
new_list = [n + 1 for n in numbers]

 

라는 짧은 구문으로도 기능을 사용할 수 있다.

 

리스트 컴프리헨션이라고는 하지만, 순서를 가진 것이라면 뭐든지 사용할 수 있다. 극단적인 예시로, 문자열도 사용할 수 있다.

 

이제 아까 미뤄두었던 if test를 살펴보자. if test는, 특정 조건을 만족시킬 경우에만 item을 가져와서 리스트에 추가시키는 기능을 한다. if문이 추가된 리스트 컴프리헨션을 펼쳐보면 다음과 같은 코드가 생긴다.

# new_list = [new_item for item in list(if test)]

list = ["first", "second", "third"]
new_list = []
for item in list:
    if test:
        new_list.append(new_item)

 

 

list 컴프리헨션이 있다면? 당연히(당연하지 않을지도 모르지만) dictionary 컴프리헨션도 있다.

딕셔너리 컴프리헨션의 기본 구조는 아래와 같다.

new_dictionary = {new_key:new_value for (key, value) in dictionary.items()(if test)}

 

list 컴프리헨션과 사용법이 크게 다르지 않다. 중간에 있는 소괄호는 실제로 작성하는 내용이니 소괄호를 빼먹지 말도록 하자. (뒤에 있는 if test를 감싸는 소괄호는 실제로 작성하는 내용이 아니다.)

 

주의할 점은 in 뒤에 올 것이 dictionary일 때에 (딕셔너리에서 딕셔너리를 만들 때에) 딕셔너리 이름 뒤 .items()를 넣을 것, 리스트에서 딕셔너리를 만들 때에는 for과 in 사이에 한 개의 값만 넣을 것... 정도가 있다.

누가 이걸 실수해? 싶겠지만 내가 실수해서 넣은 것이니 한 번쯤 읽어놓도록 하자. 나만의 이야기가 아닐 수도 있으니까 ^^

 

 

지금까지는 딕셔너리나 리스트로 반복문을 만들어 새로운 리스트나 딕셔너리를 만드는 방법을 배웠다.

이번에 배울 것은 pandas library의 dataframe으로 반복문을 실행하는 법이다.

for (index, row) in dataframe.iterrows():
    print(row)

 

를 하면, 각각의 열에 대해 반복문이 실행된다.

여기에서 row의 자리에 row.(행 이름)을 넣으면 그 행에 대한 요소가 줄줄이 출력되고, if문을 사용한다면 특정 행의 요소가 조건을 만족시킬 때에만 그 행의 요소를... 출력하는... 나도 모르겠다 이해는 대강 했는데 설명을 못하겠음 ㅈㅅ

미래의 내가 pandas 쓰다가 막히면 다시 이 글을 볼텐데, 그때 내가 이딴식으로 써놓은 것에 분노를 느끼고 고치기를 기다리도록 하자. 만약 미래의 내가 막히지 않고 이 글이 방치된다면... 그러게... 추가해달라는 댓글을 달면 설명을 추가하겠다.

 

이걸 dictionary comprehension으로도 표현할 수 있는데,

{new_key : new_value for (index, row) in dict.iterrows()}

 

이런 식으로 할 수 있다. 내가 설명을 못해서 그렇지 감만 조금 잡으면 실제로 적용하는 게 어렵지는 않다.

 

 

이번 강의는 여기서 내용 끝! 모레에 1, 2지망 1차 추합 결과가 나오는데 어떻게 될지 모르겠다. 잘 될 거라고 믿어야지.