ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python/ATL] 특이하지만 알면 편한 List Comprehension
    Python 2022. 3. 27. 22:33
    반응형

    이번주 ATL(인공지능 스터디)는 스터디원들에게 Kaggle의 python 코스를 수강하도록 했었습니다.

    python을 안 한지 꽤 오래되었는데, 빠르게 복습하기에는 유용한 코스입니다.(링크는 글 하단에 첨부하도록 하겠습니다.)

    그 중에서 기존에 python을 쓰면서 몰랐던 문법을 알게 되어 포스트로 작성하고자 합니다.


    Prerequisite

    • 반복문(for, while)
    • python List

    기존의 반복문

    코딩을 조금이라도 접한 사람이라면 이 반복문을 접해보았을 것입니다.

    대표적인 반복문으로는 for, while문이 있는데 1부터 10까지 증가하는 숫자를 담은 리스트를 만드는 것을 for 문과 while문을 통해 예시를 보여드리겠습니다.

    num = []
    for i in range(1,11):
        num.append(i)
    print(num)
    num = []
    i = 0
    while i<10 :
        i = i + 1
        num.append(i)
    print(num)

    이 코드들 모두 간단하지만 python의 List Comprehension에 비해서는 상당히 코드 줄도 많고 귀찮은 작업입니다.


    Syntactic Sugar

    저 코드도 상당히 간단한 작업으로 보일 수 있는데, 도대체 python의 List Comprehension은 얼마나 간단한걸까요?

    그 전에 Syntatic Sugar이라는 개념을 설명하는 것이 독자의 이해를 도울 수 있을 거 같아 소개하려고 합니다.

    Syntatic Sugar = 문법적 설탕

    여러분 설탕은 어떤가요? 정말 다양한 음식, 음료수에 들어가는 것이 설탕인데요! 쓴 아메리카노보다는 설탕을 조금 섞어 맛있고 먹기 편한 돌체 라떼를 좋아하는 저는 기분을 좋게 함과 동시에 일을 효율적으로 하게 해줍니다. 이와 같이 컴퓨터 언어 문법에도 설탕이 있습니다. 그리고 커피를 어떻게 더 맛있게 할까 연구하는 바리스타처럼 시간에 따라서 컴퓨터 언어 바리스타(?)들에 의해 점점 진화합니다.

     


    Python의 설탕

    python은 여러가지 설탕을 가진 매력적인 언어이지만, 오늘은 제가 학습한 설탕중 하나인 List Comprehension이라는 문법을 소개하려고 합니다. 간단한 예시를 보는 것이 가장 효율적일 거 같네요.

     

    print([i for i in range(1,11)])

    위 코드는 앞에서 소개드렸던 반복문의 for문, 그리고 while문과 같은 결과를 내놓습니다.

    앞서 작성한 코드는 1부터 10까지의 배열을 출력하는데 4~5줄을 소모했지만, 위 코드는 한 줄이면 출력이 가능합니다. 기존에는 4~5줄을 작성해야했던 코드가, 이제는 1줄만 작성해도 된다니 정말 효율성을 추구하는 프로그래머들에게는 이처럼 좋은 것이 없겠죠??;;ㅎㅎ

     

    앞에서 반복문을 사용할 때, 단순히 출력을 하기 위해서 반복문을 사용할 뿐만 아니라, 조건을 넣어서 사용이 가능합니다. 예시 코드를 봐주세요!

    print([i for i in range(1,11) if i % 2 == 0])

    물론 반복문을 사용할 때도 위 한줄만 추가하고 몇번 들여쓰기를 하면 되지만, 단순히 옆에 한 줄을 적어 조건을 걸어 출력할 수 있다는 점이 매력적입니다.


    문법 구조

    몇몇분들은 이 코드를 보면서 문법적인 구조를 파악하실 수도 있을텐데요. 이런 구조로 정리할 수 있습니다.

    [계산된요소 for 순환요소 in 순환가능객체 if 조건문]

     

    계산된요소 : 외부 변수, 혹은 순환요소가 될 수 있습니다. 혹은 어떤 조건문이 될 수 있습니다(값을 반환하기만 하면 됩니다.)

    순환요소: for문 안에서 순환하는 요소입니다.

    순환가능객체 : python에서 정의된 순환 가능 객체를 말합니다. 대표적인 예로 bytes, tuple, range, list, dict, set가 있습니다.

    조건문 : optional이지만, 순환 요소에 조건을 걸고 싶을 때 조건문을 삽입합니다.


    Syntactic Sugar에 대한 개인적인 생각

    Syntactic Sugar는 처음에 접하면 생소하고 낯설다고 느낄 수 있습니다. 기존에 쓰던 방식이 편한데 구지 바꿀 필요가 있을까 하는 생각이 들 수도 있습니다. 제가 처음 Syntactic Sugar를 접할 때 필요성을 느끼지 못했지만, javascript ES+를 공부하며 그 편리성에 대해서 깨달을 수 있게 되었습니다. 혹시나 python에서 이러한 Syntactic Sugar에 대해서 모르셨던 분이 계시다면, 이 개념을 알고 공부를 하시면 훨씬 공부하는데 도움이 될 듯합니다. 낯설어도 해보고 나면 새로운 세상이 열릴거에요!!😊


    조금 더 python에 대해서 공부하고 python의 다양한 Syntactic Sugar에 대해서 공부하고 싶으신 분


     

    반응형
Designed by Tistory.