[Python]List Comprehension

Philip Sung·2023년 9월 19일
0

[Python]

목록 보기
2/4
post-thumbnail

01 개요

list comprehension이라는 말은 set comprehension으로부터 왔으며, 완전 포함(complete inclusion) 또는 완전 서술(complete description)이라는 의미를 갖는다.

최종수정일 : 2023.09.19



02 기본개념

02.01 set-builder notation

{2∙x | x∈Z, x>0}

위의 조건제시법을 통해 양의 정수이면서 2의 배수인 값을 갖는 집합을 설명할 수 있다. 위의 예시에서 요소를 하나씩 살펴보면 다음과 같다.

x
집합의 요소(element)를 가리키며 어떤 문자로도 대체하여 사용할 수 있다.

2∙x
표현식으로 결과 집합의 원소를 표현한다.

|
는 such that 즉, x가 어떤 집합에 속하고, 어떤 조건을 갖는지를 가리킨다.

Z
정수 집합으로 x가 어떤 집합에 속하는지를 나타낸다.

x>0
결과 집합을 만드는데 포함될 x의 조건을 나타낸다.

리스트 컴프리핸션은 이와 같은 표현법을 차용한다.

02.02 Python code

#use 'for' loop

combs = []
for x in [1,2,3]:
   for y in [3,1,4]:
       if x != y:
           combs.append((x, y))

combs
#result : [(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]



#use comprehesion

[(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
#result : [(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

위 코드에서 는 같은 값을 내포하는 리스트를 생성하기 위해 for문과 list comprehension을 사용하였다.
list comprehension의 각 요소를 위에서 언급한 요소들과 비교해보면 다음과 같다.

(x, y)
결과 집합의 원소를 나타낸다.

for x
순회할 집합의 원소를 나타낸다.

in [1,2,3]
x가 순회할 집합을 나타낸다.

for y in [3,1,4]
또 다른 순회할 집합과 순회하며 추출된 원소를 나타낸다.

if x != y
결과 집합을 만드는데 사용될 조건을 나타낸다.

02.03 적용

리스트 컴프리핸션은 다음과 같은 용도로 사용될 수 있다.

문자열에서 원하는 문자만 추출하기

text = "Python is fun!"
vowels = "AEIOUaeiou"
vowels_in_text = [char for char in text if char in vowels]
print(vowels_in_text)

행렬 전치하기

matrix = [
   [1, 2, 3],
   [4, 5, 6],
   [7, 8, 9]
]

transposed_matrix = [[row[i] for row in matrix] for i in >range(len(matrix[0]))]
print(transposed_matrix)

두 리스트의 곱셈 결과를 원소로 갖는 리스트 생성하기

list1 = [1, 2, 3, 4]
list2 = [5, 6, 7, 8]

multiplied_list = [x * y for x, y in zip(list1, list2)]
print(multiplied_list)

파일에서 특정 조건을 만족하는 라인만 추출하기

with open("example.txt", "r") as file:
   long_lines = [line.strip() for line in file if len(line.strip()) >= 10]
print(long_lines)

위 예시 외에도 다양하게 응용할 수 있을 것이다.




03 list comprehension의 속성

03.01 연산 및 메모리

리스트 컴프리핸션은 반복문에 비해 실행 속도가 최적화되어있고, 코드가 간결할 수 있다.
그러나 연산을 위해 데이터를 메모리에 한번에 적재하므로, 대규모의 데이터에 대해 적용할 경우 속도가 급격히 느려질 수 있다.

03.02 생성자 표현식(Generator Expression)

myGenerator = ( n*2 for n in range(1000) )

list comprehension과 같은 어법에서 대괄호 대신 괄호를 사용할 경우 제너레이터를 생성할 수 있다.

profile
Philip Sung

0개의 댓글