logo

[Python] 조건제시법

리스트 컴프리헨션은 기존 리스트를 기반으로 새로운 리스트를 만드는 간결한 방법을 제공합니다. 파이썬에서는 이 매커니즘을 사용하여 루프와 조건문을 혼합하여 더 가독성 높고 효율적인 코드를 작성할 수 있습니다.

 

리스트 컴프리헨션의 기본 형태 및 예시

리스트 컴프리헨션의 기본 형태는 다음과 같습니다:

새_리스트 = [표현식 for 항목 in 기존_리스트 if 조건]
  • 표현식은 기존 리스트의 각 항목에 적용되어 새 리스트의 요소가 됩니다.
  • for 항목 in 기존 리스트는 기존 리스트를 순회하는 반복문입니다.
  • if 조건은 선택적이며, 해당 조건을 만족하는 항목에 대해서만 표현식이 적용됩니다.

예시 1: 0부터 9까지의 수 중에서 짝수만을 포함하는 리스트를 만들고 싶다고 가정해 보겠습니다.

짝수_리스트 = [x for x in range(10) if x % 2 == 0]
print(짝수_리스트)
# 출력: [0, 2, 4, 6, 8]
 

조건문을 포함한 리스트 컴프리헨션

리스트 컴프리헨션에서 조건문을 포함하면, 특정 조건을 만족하는 요소만 새 리스트에 포함시킬 수 있습니다.

예시 2: 다음 리스트에서 길이가 3 이상인 문자만 포함하는 새 리스트를 만듭니다.

words = ["apple", "banana", "cherry", "kiwi"]
filtered_words = [word for word in words if len(word) >= 5]
print(filtered_words)
# 출력: ['apple', 'banana', 'cherry']

리스트 컴프리헨션은 복잡한 연산도 간단한 표현으로 처리할 수 있어 파이썬 프로그래밍에서 매우 유용합니다. 예를 들어, 기존 리스트의 각 요소에 특정 연산을 적용하거나, 조건에 따라 필터링하는 등의 작업을 한 줄의 코드로 해결할 수 있습니다. 게다가, 리스트 컴프리헨션은 일반적인 for 루프에 비해 코드의 실행 속도가 빠르다는 장점도 있습니다.

이처럼 리스트 컴프리헨션은 파이썬에서 강력하면서도 표현력이 풍부한 도구로, 코드의 가독성과 효율성을 높여주는 핵심 기능 중 하나입니다.


Python에서 딕셔너리 컴프리헨션(dictionary comprehension)은 키(key)-값(value)의 쌍을 갖는 딕셔너리 객체를 생성하기 위한 간결하고 효율적인 방식을 제공합니다. 이 방식은 코드를 더 짧고 읽기 쉽게 만들며, 일반적인 for 루프보다 실행 속도가 빠를 수 있습니다.

 

딕셔너리 컴프리헨션의 기본 구조

딕셔너리 컴프리헨션의 기본 구조는 아래와 같습니다.

{키: 값 for 변수 in 반복가능객체}

예시:

# 숫자 n의 제곱 값을 키로 하고, n을 값으로 하는 딕셔너리 생성
squares = {x**2: x for x in range(6)}
print(squares)
# 출력: {0: 0, 1: 1, 4: 2, 9: 3, 16: 4, 25: 5}
 

조건을 포함하는 딕셔너리 컴프리헨션

딕셔너리 컴프리헨션에서는 조건문을 추가하여 특정 조건을 만족하는 항목들로만 딕셔너리를 구성할 수 있습니다.

{키: 값 for 변수 in 반복가능객체 if 조건}

예시:

# 짝수 번째 인덱스의 값(0 포함)을 키로 하고, 해당 값을 ASCII 문자로 변환한 것을 값으로 하는 딕셔너리 생성
char_map = {i: chr(65 + i) for i in range(26) if i % 2 == 0}
print(char_map)
# 출력: {0: 'A', 2: 'C', 4: 'E', 6: 'G', 8: 'I', 10: 'K'...}
 

루프 중첩을 사용한 딕셔너리 컴프리헨션

루프 중첩을 사용해 더 복잡한 딕셔너리 컴프리헨션이 가능합니다. 이는 여러 반복 가능 객체에 대해 중첩 루프를 실행하는 효과를 만듭니다.

{키: 값 for 변수1 in 반복가능객체1 for 변수2 in 반복가능객체2}

예시:

# 두 문자열에서 모든 가능한 문자 쌍을 생성
str1 = 'AB'
str2 = '12'
combo_dict = {k: v for k in str1 for v in str2}
print(combo_dict)
# 출력: {'A': '2', 'B': '2'}
# 주의: 같은 키에 대해서는 마지막 값이 저장됩니다.

이중 컴프리헨션 사용 시, 같은 키에 대하여 여러 값을 할당하려 하면 마지막에 계산된 값만이 딕셔너리에 저장됨을 유념해야 합니다. 이는 딕셔너리의 키가 유일해야 한다는 제약 때문입니다. 이러한 제약을 피하기 위해서는 중첩된 각 키-값 쌍이 고유하도록 설계해야 합니다.

딕셔너리 컴프리헨션은 매우 유연하고 효율적인 도구이지만, 코드의 가독성을 해치지 않도록 사용해야 합니다. 복잡하고 이해하기 어려운 컴프리헨션보다는, 때로는 기본 for 루프와 조건문을 사용하는 것이 더 적절할 수 있습니다.


세트 컴프리헨션은 파이썬의 유용한 기능 중 하나로, 특정 조건에 따라 새로운 세트를 생성하는 간결한 방법을 제공합니다. 다음은 세트 컴프리헨션의 개념과 사용법에 대해 자세히 설명합니다.

 

세트 컴프리헨션의 기본 구조

세트 컴프리헨션은 대괄호 {} 내에 표현식(expression)과 for 절을 포함하며, 필요에 따라 if 절을 추가할 수 있습니다. 기본 구조는 다음과 같습니다.

{expression for item in iterable}

여기서 expressioniterable의 각 아이템에 대해 평가된 결과입니다. 세트 컴프리헨션은 이러한 표현식을 평가하여 새로운 세트를 생성합니다.

예시: 간단한 세트 컴프리헨션

numbers = [1, 2, 2, 3, 4, 4, 5]
unique_squares = {x**2 for x in numbers}

print(unique_squares)

위 예시에서 unique_squares는 입력 리스트 numbers의 각 요소를 제곱하여 생성한 세트입니다. 세트이므로 중복값은 제거됩니다. 결과는 {1, 4, 9, 16, 25} 같은 고유한 제곱값의 세트입니다.

 

조건을 포함하는 세트 컴프리헨션

세트 컴프리헨션은 if 조건을 추가하여 특정 조건을 충족하는 요소에 대해서만 표현식을 평가할 수 있습니다. 구조는 다음과 같습니다.

{expression for item in iterable if condition}

예시: 조건을 포함하는 세트 컴프리헨션

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_squares = {x**2 for x in numbers if x % 2 == 0}

print(even_squares)

위 예시에서 even_squaresnumbers 리스트의 요소 중 짝수인 요소만을 제곱하여 만든 세트입니다. 결과는 {4, 16, 36, 64, 100}와 같은 짝수의 제곱값만 포함하는 세트입니다.

 

정리

  • 세트 컴프리헨션은 간결하게 세트를 생성하는 방법입니다.
  • 기본 구조는 {expression for item in iterable}입니다.
  • 조건을 추가하려면 {expression for item in iterable if condition} 형태를 사용합니다.
  • 세트 컴프리헨션은 중복 값을 자동으로 제거합니다.

세트 컴프리헨션을 사용함으로써 코드를 더 간결하고 읽기 쉽게 만들 수 있으며, 특정 조건에 맞는 요소를 효율적으로 필터링하여 새로운 세트를 생성할 수 있습니다.


 

이중 컴프리헨션

컴프리헨션(comprehension)은 리스트, 딕셔너리, 세트와 같은 컬렉션을 간결하게 생성하기 위한 Python의 강력한 특성입니다. 이중 컴프리헨션(double comprehension)은 이 개념을 한 단계 더 나아가, 중첩된 반복문 구조를 사용하여 복잡한 컬렉션을 더 간결하게 생성할 수 있도록 해줍니다.

이중 컴프리헨션의 기본 구조

이중 컴프리헨션은 기본적으로 다음과 같은 구조를 가지고 있습니다.

[expression for item1 in iterable1 for item2 in iterable2]

여기서 expression은 최종적으로 생성될 컬렉션의 각 요소에 대한 표현이며, iterable1iterable2는 반복 가능한 객체(리스트, 튜플, 세트 등)입니다.

이중 컴프리헨션의 사용 예시

1. 이중 리스트 컴프리헨션

이중 for 문을 사용하여 두 개의 리스트에서 모든 가능한 조합을 생성하는 예시입니다.

numbers = [1, 2, 3]
letters = ['A', 'B', 'C']
combos = [(n, l) for n in numbers for l in letters]
print(combos)

출력:

[(1, 'A'), (1, 'B'), (1, 'C'), (2, 'A'), (2, 'B'), (2, 'C'), (3, 'A'), (3, 'B'), (3, 'C')]
2. 이중 리스트 컴프리헨션을 사용한 행렬 표현

이중 컴프리헨션을 사용하여 3x4 크기의 행렬을 생성하는 예시입니다.

matrix = [[j for j in range(4)] for i in range(3)]
print(matrix)

출력:

[[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]]
3. 조건을 포함한 이중 컴프리헨션

이중 컴프리헨션은 조건문을 포함할 수도 있습니다. 예를 들어, 두 리스트에서 각각의 원소를 더한 값이 짝수인 경우에만 튜플을 생성하는 예시입니다.

numbers1 = [1, 2, 3, 4]
numbers2 = [5, 6, 7, 8]
filtered_combos = [(n1, n2) for n1 in numbers1 for n2 in numbers2 if (n1+n2) % 2 == 0]
print(filtered_combos)

출력:

[(1, 5), (1, 7), (2, 6), (2, 8), (3, 5), (3, 7), (4, 6), (4, 8)]

이중 컴프리헨션 덕분에, 복잡하고 중첩된 반복과 조건문 구조를 한 줄의 간결한 코드로 요약하여, 코드의 가독성을 크게 향상시킬 수 있습니다.

Previous
중첩 조건문
Next
예외