-
[Python] List Comprehension (리스트내포): list를 효율적으로Python Study 2024. 8. 1. 22:23728x90
[Python] List Comprehension (리스트내포): list를 효율적으로
기본 구문
[표현식 for 항목 in iterable if 조건]
- 표현식: 새로운 리스트의 각 요소를 정의합니다.
- 항목: 기존 리스트 또는 다른 iterable의 각 요소를 나타냅니다.
- iterable: 순회 가능한 객체 (예: 리스트, 문자열, 튜플 등)
- 조건 (선택 사항): 필터 역할을 하며, 조건이 참인 경우에만 요소가 리스트에 포함됩니다.
예제
1. 기본 사용법
- 기존 리스트의 각 요소에 2를 곱한 새로운 리스트를 생성:
numbers = [1, 2, 3, 4, 5] doubled = [num * 2 for num in numbers] print(doubled) # 출력: [2, 4, 6, 8, 10]
2. 조건 추가
- 리스트의 요소 중 짝수만 포함:
numbers = [1, 2, 3, 4, 5] evens = [num for num in numbers if num % 2 == 0] print(evens) # 출력: [2, 4]
3. 중첩 루프
- 두 리스트의 각 요소의 곱을 구하는 리스트:
list1 = [1, 2, 3] list2 = [4, 5, 6] products = [a * b for a in list1 for b in list2] print(products) # 출력: [4, 5, 6, 8, 10, 12, 12, 15, 18]
복잡한 예제
문자열 리스트에서 문자열의 길이를 구하는 리스트를 생성:
words = ["hello", "world", "python", "list", "comprehension"] lengths = [len(word) for word in words] print(lengths) # 출력: [5, 5, 6, 4, 13]
리스트 내포를 사용하여 1부터 10까지의 제곱수를 가지는 리스트를 생성:
squares = [x**2 for x in range(1, 11)] print(squares) # 출력: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
리스트 내포를 사용하여 주어진 리스트에서 특정 조건을 만족하는 요소를 변환하여 새 리스트를 생성:
# 원본 리스트 original = ["apple", "banana", "cherry", "date"] # 'a'를 포함하는 단어를 대문자로 변환 filtered = [fruit.upper() for fruit in original if 'a' in fruit] print(filtered) # 출력: ['APPLE', 'BANANA', 'DATE']
리스트 내포를 사용하여 중첩 리스트의 요소를 평탄화(flatten)하기:
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] flattened = [num for row in matrix for num in row] print(flattened) # 출력: [1, 2, 3, 4, 5, 6, 7, 8, 9]
리스트 내포의 장점
- 간결함: 코드를 더 짧고 읽기 쉽게 만듭니다.
- 성능: 일반적으로 for 루프보다 더 빠릅니다.
- 유연성: 조건문과 중첩 루프를 쉽게 사용할 수 있습니다.
리스트 내포의 주의사항
- 가독성: 너무 복잡한 리스트 내포는 가독성을 떨어뜨릴 수 있습니다. 간단한 경우에 사용하는 것이 좋습니다.
- 성능: 매우 큰 리스트를 생성하는 경우 메모리 사용량에 주의해야 합니다.
728x90'Python Study' 카테고리의 다른 글
[Python] Try Except 예외처리 (0) 2024.08.01 [Python] 랜덤함수 random, randrange, randint (0) 2022.06.27 [Python] 숫자 처리 함수 abs, pow, max, min, math (0) 2022.06.27 [Python] 산술연산자, 비교연산자, 할당연산자, 논리연산자, 맴버연산자, 식별연산자 (2) 2022.03.19 [Python] 데이터타입, 변수, 주석처리, 입출력 (0) 2022.03.19