본문 바로가기
coding 📟/python 💻

[Python] 리스트 컴프리헨션 List Comprension (if else)

by 고돌한 데이터 사이언스 2022. 5. 20.
반응형

 

아마 필자 포함 많은 분들이 파이썬에서 루프문을 작성하여 새로운 리스트 생성시 많이 사용할거라 생각되는

리스트 컴프리헨션 list comprehension 을 정리해보고자 한다.

 

Comprehension 이란?


원하는 데이터를 파이썬에서 제공하는 자료구조(list, dictionary, set)에 담아 표현하려 할때 사용하는 문법이다.

 

  • 하나 이상의 순회 가능한 시퀀스한 객체(리스트, 제너레이터 등) 로부터 파이썬 자료구조를 간단하게 생성하는 방법
  • pythonic 파이썬을 더욱 파이썬스럽게 사용할 수 있는 방법

표현시 사용할 수 있는 문법의 종류는 아래 4가지이다.

  1. List Comprehension
  2. Dictionary Comprehension
  3. Set Comprehension
  4. Generator Comprehension

이번 포스트는 4가지 중 첫번째 리스트 컴프리헨션에 대한 정리이다.

 

왜, 언제 쓰는데?


가장 많이 쓰는 경우는 아마 리스트의 항목을 처리 할 때라고 생각된다.

쉽게 설명하면 리스트 안에 표현식과 for 문 if문을 한줄에 넣어서 새로운 리스트를 생성하는 것이다.

 

쓰는 이유로는 아마 2가지 이유가 가장 강력하기 때문이라 생각된다.

 

1. 간결한 구조

예시로 1부터 10까지 정수를 순서대로 가지고 있는 리스트를 생성하는 코드는 보통 다음과 같다.

nums = []
for n in range(1,11):
	nums.append(n)

이를 리스트 컴프리헨션을 이용하면 아래의 코드와 같다.

nums = [i for i in range(1,11)]

 

이처럼 위 코드에 비해 훨씬 간결해짐으로써 더욱 직관적으로 코드를 볼 수 있는 장점이 있다.

 

2. 빠른 속도

일반적으로 루프문을 통해 List를 Append 하는 것보다 List Comprehension을 통해 구현하는 것이 더 빠르다.

해당 내용은 아래의 블로그에서 정리를 잘 해주셔서, 이 글을 참고하면 이해하는데 도움이 될 것이다.

https://jeongukjae.github.io/posts/inspecting-list-comprehension/

 

List Comprehension이 빠른 이유를 찾아보자

Python을 어느정도 쓰는 사람이면 누구나 듣는 “List Append를 하는 것보다 List Comprehension을 써서 구현하는 것이 더 빠르고 간결하다.”라는 말. 하지만 실제 내부 동작과 더불어 설명하는 사람은 드

jeongukjae.github.io

 

사용법


1) 기초 사용법

사용법은 아래 예시 처럼 간단하다.

nums = [i for i in range(1,11)]

대괄호 [] 내부에 for문과 if문을 사용하여 리스트를 간단하게 생성할 수 있다.

range(1,11) 범위 안에서 i 값이 루프를 돌고

해당 루프를 도는 i 값을 대괄호 시작 바로 뒤에 배치 함으로써

루프를 돌때마다 nums 라는 리스트에 추가되는 형식이다.

 

2) 수식 적용

nums = [i+i for i in range(1,11)]

위와 같이 i 값에 수식을 적용할 수 있다.

 

3) 함수 적용

def func(x):
	x = str(x) + 'a'
    return x
    
nums = [func(i) for i in range(1,11)]

위와 같이 함수를 정의하고

함수를 거친 i 값으로 리스트 생성이 가능하다.

 

4) 조건문 적용

nums = [i for i in range(1,11) if i==3]

for문 뒤에 걸고 싶은 조건을 적용시켜 

해당 조건에 만족하는 값만 리스트에 추가 할 수 있다.

 

nums = [i for i in range(1,11) if i==3 if type(i) is int]

nums = [i for i in range(1,11) if i==3 and type(i) is int] # and로 표시

if 문을 여러개 사용할 수 있다. 이렇게 되면 and 조건으로 묶여 두 조건을 만족하는 경우만 리스트에 담는다.

두 코드는 같은 표현이다.

 

nums = [i if i==3 else 'None' for i in range(1,11)]

if else 구문을 사용하고 싶을 시 왼쪽에 조건을 걸고 해당 조건이 아닐시 적용할 거를 명시 해준다.

 

4) 이중 for 문

nums = [(i,j) for i in range(2) for j in range(3)]

nums = []
for i in range(2):
    for j in range(3):
        temp = (i,j)
        nums.append(temp)

위 와 같이 중첩 for 문을 수행할 수 있다.

두개의 코드와 같은 코드이다

 

정리하며...


파이썬의 꽃이라고 할 수 있는 Comprehension에 대해 알아 보았다.

 

필자도 많이 쓰고, 아마 python을 사용하는 여러 개발자, 분석가 들도 애용할 거라 생각한다.

 

간결한 코드와 속도 적인 측면을 동시에 잡을 수 있는 파이써닉한 Comprehension 을 통해 효율적인 코드를 작성해보자.

 

  1. Dictionary Comprehension
  2. Set Comprehension
  3. Generator Comprehension

는 아래 게시글을 참고하자.

2022.05.20 - [coding 📟/python 💻] - [Python] 딕셔너리 컴프리헨션 + 집합, 제너레이터 컴프리헨션

 

[Python] 딕셔너리 컴프리헨션 + 집합, 제너레이터 컴프리헨션

저번에 python 컴프리헨션 쓰는 이유와 그 중에서도 list 컴프리헨션 사용법에 대해 정리하였다. 아래의 게시글을 참고하자. 2022.05.20 - [coding 📟/python 💻] - [Python] 리스트 컴프리헨션 List Comprension..

kodorricoding.tistory.com

 

반응형

댓글