파이썬에서 리스트 내포(List Comprehension)는 데이터를 다룰 때 굉장히 유용하다.
반복문과 조건문을 사용하여 리스트를 간결하고 효율적으로 생성할 수 있으며, 단 한 줄로 작성이 가능하다.
리스트 내포는 코드의 가독성 향상 뿐만 아니라, 단순 for문보다 속도도 빠르다는 장점이 있다.
리스트 내포의 기본 구조는 아래와 같다.
[expression for item in iterable if condition]
= [표현식 for 변수 in 반복할 수 있는 대상 if 조건]
- expression (표현식): 각 변수에 적용되는 표현식
- item (변수): 반복할 수 있는 대상의 각 항목
- iterable (반복할 수 있는 대상): 반복 가능한 객체(리스트, 튜플, 집합 등)
- if condition (조건): 선택적이며, 이 조건을 만족하는 변수에 대해서만 표현식을 적용
아래 이와 관련한 세 개의 예제를 다루어보고자 한다.
예제 1: 간단한 리스트 내포
numbers = [1, 2, 3, 4, 5]
squared = [n ** 2 for n in numbers]
print(squared) # 결과: [1, 4, 9, 16, 25]
예제 2: 조건을 포함한 리스트 내포
numbers = [1, 2, 3, 4, 5]
even_squared = [n ** 2 for n in numbers if n % 2 == 0]
print(even_squared) # 결과: [4, 16]
예제 3: 문자열 리스트에서 특정 문자를 포함하는 단어 찾기
words = ["apple", "banana", "cherry", "date"]
a_words = [word for word in words if 'a' in word]
print(a_words) # 결과: ['apple', 'banana', 'date']
일반적인 for문과 리스트내포의 속도 차이를 한번 비교해보았다. 얼마나 차이가 날까?
import timeit
# 리스트 생성
numbers = list(range(1, 10001))
# for 문 사용
def for_loop():
squared_for = []
for n in numbers:
squared_for.append(n ** 2)
# 리스트 내포 사용
def list_comprehension():
squared_comp = [n ** 2 for n in numbers]
# 시간 측정
time_for = timeit.timeit(for_loop, number=1000)
time_comp = timeit.timeit(list_comprehension, number=1000)
print("For 문 사용 시간:", time_for)
print("리스트 내포 사용 시간:", time_comp)
반복해야 할 숫자가 커질수록 시간의 차이는 더 많이 나게된다.
또한 단순 계산이 아닌 비교, 조건문 등이 붙는다면 계산 시간의 차이는 훨씬 더 나게될 수 있다.
그동안 for문으로 작업을 많이 했었는데, 코드가 돌아가는데 많은 시간이 소요될 뿐만 아니라,
코드 자체가 굉장히 비대해져 한눈에 파악하기 어려운 단점이 있었다.
앞으로는 리스트 내포를 적극 활용하여 보다 더 효율적인 코드 작업을 할 수 있도록 해야겠다.
'내가 공부한 것들' 카테고리의 다른 글
[파이썬] csv 및 Excel 가져오기, 내보내기 (0) | 2024.01.04 |
---|---|
[파이썬] 데이터프레임 다루기(특정 행 및 열 추출, 컬럼 추가, 수정 등) (0) | 2024.01.04 |
[파이썬] 경로설정을 할 때 반드시 주의할 것 (0) | 2023.05.12 |
[파이썬] 데이터프레임에서 조건에 맞는 행(Row) 추출하는 방법 (0) | 2022.12.18 |
[파이썬] 데이터프레임에서 원하는 열(Column)만 추출하는 방법 2가지 (0) | 2022.12.18 |