FRONTMANFRONTMAN
  • 태그
  • 방명록
  • 글쓰기
  • 관리자
  • HOME
  • 태그
  • 방명록
Python의 리스트 컴프리헨션(List Comprehension)
hahekaku
Python의 리스트 컴프리헨션(List Comprehension)Language/Python2023. 10. 23. 16:14@hahekaku
Table of Contents

리스트 컴프리헨션이란?

파이썬에서 리스트 컴프리헨션(List Comprehension)은 기존의 for문을 사용한 리스트 생성 방식을 간단하고 효율적으로 표현할 수 있도록 도와주는 구문입니다. 이를 사용하면 더 읽기 쉽고 간결한 코드를 작성할 수 있습니다.

기본 구문

리스트 컴프리헨션의 기본 문법은 다음과 같습니다:

[표현식 for 아이템 in 반복가능객체 if 조건식]

위 구조는 아래와 같이 일반적인 for문과 동일한 결과를 생성합니다:

결과_리스트 = []
for 아이템 in 반복가능객체:
    if 조건식:
        결과_리스트.append(표현식)

간단한 예시

다음은 1부터 10까지의 숫자 중 짝수를 담는 리스트를 생성하는 예제입니다.

for문을 사용한 방식

even_numbers = []
for number in range(1, 11):
    if number % 2 == 0:
        even_numbers.append(number)

print(even_numbers)  # [2, 4, 6, 8, 10]

리스트 컴프리헨션을 사용한 방식

even_numbers = [number for number in range(1, 11) if number % 2 == 0]
print(even_numbers)  # [2, 4, 6, 8, 10]

두 코드의 결과는 같지만, 리스트 컴프리헨션을 사용한 방식이 더 간결하고 읽기 쉽습니다.


실전 활용 예제

1. 문자열 처리

리스트 컴프리헨션을 활용하여 문자열 데이터를 변환할 수 있습니다.

문제: 이름 목록에서 길이가 4 이하인 이름만 소문자로 변환하기

names = ["Alice", "Bob", "Charlie", "David"]
short_names = [name.lower() for name in names if len(name) <= 4]
print(short_names)  # ['bob']

2. 이중 for문과 리스트 컴프리헨션

리스트 컴프리헨션은 중첩된 for문도 지원합니다.

문제: 2단과 3단의 구구단 결과 생성

multiplication_table = [(x, y, x * y) for x in range(2, 4) for y in range(1, 10)]
print(multiplication_table)
# [(2, 1, 2), (2, 2, 4), ..., (3, 9, 27)]

3. 딕셔너리 컴프리헨션과 함께 사용

리스트 컴프리헨션과 유사하게 딕셔너리도 컴프리헨션으로 작성할 수 있습니다.

문제: 이름과 나이를 딕셔너리로 변환

names = ["Alice", "Bob", "Charlie"]
ages = [25, 30, 35]
name_to_age = {name: age for name, age in zip(names, ages)}
print(name_to_age)  # {'Alice': 25, 'Bob': 30, 'Charlie': 35}

리스트 컴프리헨션의 장점과 단점

장점

  1. 간결함: 코드가 훨씬 짧고 명료해집니다.
  2. 성능: 일반적으로 for문보다 빠르게 실행됩니다.
  3. 가독성: 데이터 변환과 필터링을 한눈에 이해할 수 있습니다.

단점

  1. 복잡성 증가: 너무 복잡한 로직을 담으면 오히려 가독성이 떨어질 수 있습니다.
  2. 디버깅 어려움: 리스트 컴프리헨션 내 에러를 찾기 어렵습니다.

고급 활용

조건문 여러 개 사용하기

문제: 1부터 20까지 숫자 중 3의 배수는 "Fizz", 5의 배수는 "Buzz", 두 조건을 만족하면 "FizzBuzz"로 변환

fizzbuzz = [
    "FizzBuzz" if x % 3 == 0 and x % 5 == 0 else
    "Fizz" if x % 3 == 0 else
    "Buzz" if x % 5 == 0 else x
    for x in range(1, 21)
]
print(fizzbuzz)
# [1, 2, 'Fizz', 4, 'Buzz', 'Fizz', 7, 8, 'Fizz', 'Buzz', 11, 'Fizz', 13, 14, 'FizzBuzz', 16, 17, 'Fizz', 19, 'Buzz']

리스트에서 중복 제거

문제: 숫자 리스트에서 중복을 제거하고 제곱 값으로 변환

numbers = [1, 2, 2, 3, 4, 4, 5]
unique_squares = [x**2 for x in set(numbers)]
print(unique_squares)  # [1, 4, 9, 16, 25]

결론

리스트 컴프리헨션은 파이썬에서 강력하고 유용한 기능으로, 다양한 데이터 변환 작업을 간단히 처리할 수 있게 해줍니다. 하지만 복잡한 로직에는 적합하지 않으므로, 적절히 사용하여 가독성과 효율성을 모두 만족시키는 것이 중요합니다.

 

'Language > Python' 카테고리의 다른 글

Python 객체지향 프로그래밍 (OOP)  (0) 2023.10.24
Python 파일 입출력 (파일 열기, 읽기와 쓰기)  (0) 2023.10.24
Python 딕셔너리(Dictionary)와 집합(Set)  (0) 2023.10.22
Python 리스트(list)와 튜플(tuple)  (0) 2023.10.22
Python 조건문과 반복문  (0) 2023.10.21
Language/Python 추천 글
more
  • Python 객체지향 프로그래밍 (OOP)
    Python 객체지향 프로그래밍 (OOP)2023.10.24
  • Python 파일 입출력 (파일 열기, 읽기와 쓰기)
    Python 파일 입출력 (파일 열기, 읽기와 쓰기)2023.10.24
  • Python 딕셔너리(Dictionary)와 집합(Set)
    Python 딕셔너리(Dictionary)와 집합(Set)2023.10.22
  • Python 리스트(list)와 튜플(tuple)
    Python 리스트(list)와 튜플(tuple)2023.10.22
FRONTMAN

검색

250x250

방문자 수

Total
Today
Yesterday

카테고리

  • 분류 전체보기 (54)
    • Language (48)
      • JavaScript (15)
      • TypeScript (14)
      • Python (14)
      • Dart (5)
      • Java (0)
    • FE (6)
      • WEB (4)
      • React (0)
      • Flutter (1)
    • CS (0)
      • Algorithm (0)
      • Network (0)
    • DevOps (0)

공지사항

  • 전체보기

최근 글

인기 글

태그

  • npm
  • JavaScript
  • nodejs
  • OOP
  • function
  • export
  • 타입
  • typeScript
  • DART
  • async
  • Python
  • web
  • js
  • Modules
  • tuple
  • 자바스크립트
  • await
  • Interface
  • Object
  • Type
  • Import
  • 타입스크립트
  • Flutter
  • frontend
  • inline frame
  • 파이썬
  • 리스트
  • CLASS
  • 웹
  • list

최근 댓글

FRONTMAN :: hahekaku
CopyrightBluemivDesigned byBluemiv

티스토리툴바