리스트 내포(List Comprehensions)는 파이썬에서 강력한 기능 중 하나로, 반복 작업을 간결하게 표현할 수 있는 방법이다. 이 기능은 기존 리스트, 튜플, 집합, 딕셔너리 등의 반복 가능한(iterable) 객체에서 새로운 리스트를 생성하는 데 사용된다. 다양한 예시 코드와 설명을 통해 리스트 내포의 다양한 활용법을 살펴보자.
1. 기본 리스트 구조
리스트 내포는 기본적으로 다음과 같은 구조를 가진다.
lst = [expression for item in iterable if condition]
• expression : 각 요소를 변환하거나 계산하는 표현식이다.
• item : 반복 가능한(iterable) 객체에서 하나의 요소를 가리킨다.
• iterable : 데이터를 순회할 수 있는 객체(리스트, 튜플, 문자열 등)이다.
• condition(선택 사항) : 조건문으로 해당 조건을 만족하는 요소만을 선택적으로 리스트에 포함시킬 수 있다.
2. 기본 리스트 내포 사용법
이제는 리스트 내포의 다양한 사용법에 대해 알아보자.
기본 구조
예제 코드
# 1. 제곱 값 리스트 만들기
squares = [x ** 2 for x in range(1, 6)]
# 출력: [1, 4, 9, 16, 25]
# 2. 긴 단어만 선택하기
words = ["apple", "banana", "cherry", "date", "elderberry"]
long_words = [word for word in words if len(word) >= 5]
# 출력: ['apple', 'banana', 'cherry', 'elderberry']
# 3. 리스트 내 정수 더하기
numbers = [1, 2, 3, 4, 5]
sum_of_numbers = sum([num for num in numbers])
# 출력: 15
중첩 리스트 내포
예제 코드
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened_matrix = [num for row in matrix for num in row]
# 출력: [1, 2, 3, 4, 5, 6, 7, 8, 9]
리스트 내포는 중첩하여 사용할 수 있으며, 이를 통해 다차원 리스트를 생성할 수 있다.
조건부 표현식 사용
예제 코드
numbers = [1, 2, 3, 4, 5]
even_or_odd = ["even" if num % 2 == 0 else "odd" for num in numbers]
# 출력: ['odd', 'even', 'odd', 'even', 'odd']
리스트 내포에서 조건부 표현식을 사용하여 조건에 따라 다른 값을 할당할 수 있다.
중복 제거 및 정렬
예제 코드
numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
unique_sorted_numbers = sorted(list(set(numbers)))
# 출력: [1, 2, 3, 4, 5, 6, 9]
리스트 내포를 사용하여 중복된 요소를 제거하거나 정렬할 수 있다.
문자열 조작
예제 코드
text = "Hello, World!"
uppercase_letters = [char.upper() for char in text if char.isalpha()]
# 출력: ['H', 'E', 'L', 'L', 'O', 'W', 'O', 'R', 'L', 'D']
리스트 내포는 문자열 처리에도 유용하게 사용될 수 있다.
딕셔너리 내포
예제 코드
names = ["Alice", "Bob", "Charlie"]
name_lengths = {name: len(name) for name in names}
# 출력: {'Alice': 5, 'Bob': 3, 'Charlie': 7}
리스트 내포와 유사하게 딕셔너리 내포도 가능하다.
조건부 리스트 내포
예제 코드
numbers = [1, 2, 3, 4, 5]
even_squares = [x ** 2 for x in numbers if x % 2 == 0]
# 출력: [4, 16]
조건에 따라 다른 리스트 내포를 사용할 수 있다.
리스트 내포와 함수 조합
예제 코드
def square(x):
return x ** 2
numbers = [1, 2, 3, 4, 5]
squared_numbers = [square(num) for num in numbers]
# 출력: [1, 4, 9, 16, 25]
리스트 내포와 함수를 조합하여 리스트를 생성할 수 있다.
리스트 내포로 N x M의 2차원 리스트 만들기
예제 코드
n행과 m열의 모든 요소를 0으로 초기화
n = 3 # 행의 개수
m = 4 # 열의 개수
# n x m 크기의 2차원 리스트 초기화
matrix = [[0 for j in range(m)] for i in range(n)]
# 결과 확인
for row in matrix:
print(row)
결과
[0, 0, 0, 0]
[0, 0, 0, 0]
[0, 0, 0, 0]
리스트 내포는 데이터 처리, 필터링, 변환, 정렬 등 다양한 작업에 활용된다. 위 예시 코드와 설명을 참고하여 원하는 작업에 적용할 수 있다. 리스트 내포는 파이썬의 풍부한 기능 중 하나로 코드를 간결하게 작성하고 가독성을 향상하는 데 큰 도움이 된다. 그러나 지나치게 복잡한 경우나 가독성이 떨어지는 경우에는 일반적인 for 루프를 사용하는 것이 더 나을 수 있다.
읽어주셔서 감사합니다.