Recent Posts
Recent Comments
Archives
반응형
250x250
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Today
Yesterday

Total
05-18 00:00
관리 메뉴

Hey Tech

[파이썬] 리스트 컴프리헨션(list comprehension)에 대해 알아보자! 본문

SW 개발/Python

[파이썬] 리스트 컴프리헨션(list comprehension)에 대해 알아보자!

Tony Park 2021. 4. 13. 09:51
728x90
반응형

간단한 내용이므로 바로 본론으로 들어가죠!

1.  정의 및 특징

리스트 컴프리헨션(comprehension)은 리스트를 초기화하는 방법 중 하나로서 대괄호('[]') 안에 조건문이나 반복문을 넣는 방식으로 리스트를 초기화하는 방식입니다. 리스트 컴프리헨션은 필요한 리스트를 생성할 때 보다 간결하고 직관적으로 코드를 작성할 수 있도록 도와줍니다. 아래 예시와 함께 살펴보죠.

2.  예시1: 일반적인 리스트 생성 방법과 비교

예시로서 간단하게 1부터 100까지의 정수 중에서 짝수만 포함하는 리스트를 생성해 보겠습니다. 특히 반복문과 조건문을 각각 나누어 사용하여 리스트를 생성하는 방법과 나누어 살펴보도록 하겠습니다.

(1)  일반적인 방법

먼저, 리스트를 직접 생성하고, 반복문을 수행하고 그 안에서 조건문을 수행하는 코드입니다.

코드

# 리스트 생성
arr = []
# 1부터 100까지 1씩 증가하는 반복문
for i in range(1, 101):
    # 2로 나누어 떨어지는지 확인하는 조건문
    if (i % 2 == 0):
        arr.append(i)    
print(arr)

파이썬 문법을 하나씩 잘 적용해서 완성한 코드입니다.

출력결과

[2, 4, 6, ...(중략)... 96, 98, 100]

(2) 리스트 컴프리헨션 활용한 방법

다음으로 리스트 컴프리헨션으로 작성한 코드입니다.

코드

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

출력 결과

[2, 4, 6, ...(중략)... 96, 98, 100]

주석을 제외하고 5줄로 작성했던 코드를 단 2줄로 줄일 수 있었습니다. 이처럼 리스트 컴프리헨션은 코드를 간결하고 직관적으로 작성하는 데 큰 도움이 된답니다 :)

3.  예시2: 2차원 리스트 초기화

(1) 리스트 컴프리헨션 활용

리스트 컴프리헨션은 2차원 리스트를 초기화할 때 더욱 유용합니다. 예를 들어 3X4 차원의 2차원 리스틀 생성해 본다고 가정해 보겠습니다.

코드

# N X M 크기의 2차원 리스트 초기화
n = 3
m = 4
arr = [[0] * m for _ in range(n)]
print(arr)

출력 결과

[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

(2) 리스트 컴프리헨션 활용 X 

특히 특정 크기의 2차원 배열을 초기화할 때는 반드시 리스트 컴프리헨션을 이용해야 합니다. 아래와 같이 2차원 리스트를 초기화하게 되면 예상치 못한 결괏값이 나올 수 있습니다.

# N X M 크기의 2차원 리스트 초기화
n = 3
m = 4
arr = [[0] * m] * n
print(arr) # [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

arr[1][1] = 7
print(arr) # [[0, 7, 0, 0], [0, 7, 0, 0], [0, 7, 0, 0]]

위의 코드에서 특정 인덱스에 해당되는 원소의 값만 변경을 시도하였지만, 출력 결과에서 보실 수 있듯이 리스트 내 인덱스가 1인 모든 원소의 값이 변경된 것을 확인하실 수 있습니다. 이러한 현상은 내부적으로 포함된 3개의 리스트가 모두 동일한 객체의 3개에 대한 참조값으로 여겨지기 때문입니다. 따라서 특정 크기를 갖는 2차원 리스트를 초기화할 때는 반드시 리스트 컴프리헨션을 사용해야 한다는 것을 기억해 주세요!


포스팅 내용에 오류가 있을 경우 댓글 남겨주시면 감사드리겠습니다.

그럼 오늘도 건강한 하루 보내시길 바랍니다 :)

고맙습니다.

728x90
반응형
Comments