컴프리헨션(Comprehension)은 파이썬에서 컬렉션(리스트, 집합, 딕셔너리등)을 생성하기 위한 간결하고 표현적인 방법이다.
컴프리헨션은 컴프리헨션은 리스트 컴프리헨션(List Comprehension), 집합 컴프리헨션(Set Comprehension 또는 중괄호 컴프리헨션), 딕셔너리 컴프리헨션(Dictionary Comprehension)으로 나뉩니다.
컴프리헨션은 반복문과 조건문을 결합하여 컬렉션을 생성하는 한 줄짜리 표현식으로 작성됩니다. 이는 코드를 간결하게 만들어주고, 루프를 사용하여 컬렉션을 생성하는 번거로움을 줄여줍니다.
컴프리헨션의 일반적인 구문은 다음과 같습니다.
# 리스트 컴프리헨션
[표현식 for 요소 in 반복 가능한 객체 if 조건문]
{표현식 for 요소 in 반복 가능한 객체 if 조건문}
{키_표현식: 값_표현식 for 요소 in 반복 가능한 객체 if 조건문}
위의 구문에서:
표현식
: 각 요소에 대한 계산이나 변환을 수행하는 표현식입니다.요소
: 반복 가능한 객체에서 가져온 각 요소입니다.반복 가능한 객체
: 리스트, 튜플, 집합, 문자열 등과 같은 반복 가능한 객체입니다.조건문
(선택적): 표현식이 적용되는 조건입니다.컴프리헨션은 반복문과 조건문을 함께 사용하여 데이터를 처리하고 새로운 컬렉션을 생성하는데 유용합니다. 이를 통해 코드를 더 간결하고 가독성이 높은 형태로 작성할 수 있습니다.
# 1부터 10까지의 제곱 값을 갖는 리스트 생성
squares = [x ** 2 for x in range(1, 11)]
print(squares)
>>>
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
words = ['apple', 'banana', 'cherry', 'date', 'elderberry']
long_words = [ word for word in words if len(word) >= 5]
prunt(long_words)
>>>
['apple', 'banana', 'cherry', 'elderberry']
numbers = [1, 2, 3, 4, 5]
double = [num * 2 for num in numbers]
print(double)
>>>
[2, 4, 6, 8, 10]
리스트 컴프리헨션은 반복문과 조건문을 간결하게 결합하여 다양한 작업을 수행할 수 있으며, 코드를 더욱 읽기 쉽고 간결하게 만들어 줍니다. 그러나 너무 복잡한 표현식이나 여러 조건문을 포함하는 경우에는 가독성이 감소할 수 있으므로 적절하게 사용하는 것이 중요합니다.squares = {x**2 for x in range(1, 11)}
print(squares)
>>>
{64, 1, 4, 36, 100, 9, 16, 49, 81, 25}
# 집합은 순서가 보장되지 않는다.
words = ['apple', 'banana', 'cherry', 'date', 'elderberry']
long_words = { word for word in words if len(word) >= 5}
print(long_words)
>>>
{'banana', 'elderberry', 'apple', 'cherry'}
numbers = {1, 2, 3, 4, 5}
doubled = {num * 2 for num in numbers}
prunt(doubles)
>>>
{2, 4, 6, 8, 10}
위의 예제에서, 집합 컴프리헨션은 리스트 컴프리헨션과 구문적으로 유사합니다. 중괄호({}
) 안에 표현식과 반복문, 조건문을 결합하여 집합을 생성합니다. 집합 컴프리헨션은 중복된 요소를 제거하고 유일한 값을 가지는 집합을 생성합니다. 집합 컴프리헨션은 리스트 컴프리헨션과 마찬가지로 코드를 간결하게 작성하고, 반복문과 조건문을 함께 사용하여 집합을 생성할 수 있습니다.squares = { x: x**2 for x in range(1,6)}
print(squares)
>>>
{1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
문자열 리스트의 각 단어의 길이를 키로 하고 해당 단어를 값으로 갖는 딕셔너리 생성
words = ['apple', 'banana', 'cherry', 'date']
word_lengths = { word: len(word) for word in words}
print(word_lengths)
>>>
{'apple': 5, 'banana': 6, 'cherry': 6, 'date': 4}