본문 바로가기
Artificial Intelligence/60. Python

[PYTHON] 리스트의 모든 것: 기초부터 고급 활용까지 완전 정복

by Papa Martino V 2025. 7. 21.
728x90

기초부터 고급 활용까지 완전 정복
[PYTHON] 리스트

 

파이썬(Python)은 유연하면서도 강력한 프로그래밍 언어이며, 그 중심에는 리스트(List)가 있습니다. 리스트는 데이터를 저장하고 조작하는 데 매우 중요한 데이터 구조입니다. 그러나 많은 개발자들이 리스트를 단순한 데이터 집합으로만 사용하는 경우가 많습니다. 본 글에서는 기본 사용법을 넘어, 리스트의 고급 기능, 성능 최적화, 실전 예제까지 독창적이고 실용적인 관점으로 파헤쳐 보겠습니다.

1. 리스트(List)의 본질: 단순한 배열이 아니다

파이썬 리스트는 단순한 배열 그 이상입니다. 동적 배열(Dynamic Array) 구조를 기반으로 하며, 다양한 타입의 데이터를 하나의 리스트에 저장할 수 있는 유연한 컨테이너입니다. 자바의 ArrayList나 C++의 vector와 비슷하지만, 파이썬 리스트는 더 강력한 메서드와 문법적 편리함을 제공합니다.

2. 리스트 기본 문법과 실전 팁


fruits = ['apple', 'banana', 'cherry']
fruits.append('orange')
fruits.remove('banana')
fruits.insert(1, 'kiwi')
print(fruits)  # ['apple', 'kiwi', 'cherry', 'orange']
  

Tip: `insert()`를 지나치게 사용하면 리스트 재배열이 빈번하게 일어나 성능 저하가 발생할 수 있습니다.

3. 리스트 컴프리헨션(List Comprehension)의 마법

리스트 컴프리헨션은 파이썬의 가장 강력한 기능 중 하나입니다. 짧고 명확하게 리스트를 생성할 수 있으며, 성능도 뛰어납니다.


squares = [x**2 for x in range(10)]
evens = [x for x in range(20) if x % 2 == 0]
  

리스트 컴프리헨션을 사용할 경우, 일반적인 for문에 비해 최대 2배 이상 빠른 성능을 기대할 수 있습니다.

4. 리스트 슬라이싱(Slicing): 데이터를 자유자재로 조작


numbers = list(range(10))
print(numbers[2:7])       # [2, 3, 4, 5, 6]
print(numbers[::-1])      # [9, 8, 7, ..., 0] (역순)
print(numbers[::2])       # [0, 2, 4, 6, 8]
  

슬라이싱은 복사와 필터링을 효율적으로 처리할 수 있는 도구입니다. 특히 `[::-1]`은 리스트를 역순으로 뒤집을 때 매우 유용합니다.

5. 리스트와 메모리: 얕은 복사 vs 깊은 복사


a = [[1, 2], [3, 4]]
b = a.copy()       # 얕은 복사
c = copy.deepcopy(a)  # 깊은 복사
  

얕은 복사는 내부 리스트까지 복사하지 않기 때문에, 원본의 변경이 복사본에도 영향을 줍니다. 따라서 다차원 리스트를 사용할 땐 반드시 깊은 복사를 고려해야 합니다.

6. 리스트 vs 튜플 vs 집합 vs 딕셔너리: 어떤 자료형이 적합할까?

특성 리스트(List) 튜플(Tuple) 집합(Set) 딕셔너리(Dictionary)
변경 가능 여부 가능 불가능 가능 가능
중복 허용 허용 허용 불허용 Key 중복 불허
정렬 보장 보장 보장 불보장 Python 3.7 이후 보장
용도 순차적 데이터 저장 고정 데이터 저장 고속 검색/중복 제거 Key-Value 매핑

7. 실전 예제: 리스트로 미니 데이터베이스 구현하기


users = []

def add_user(name, age):
    users.append({'name': name, 'age': age})

def find_user(name):
    return [u for u in users if u['name'] == name]

add_user('Alice', 30)
add_user('Bob', 25)
print(find_user('Alice'))
  

리스트를 활용하면 간단한 레코드 저장 및 검색 기능도 구현할 수 있습니다. 데이터베이스 없이 테스트용 앱을 만들 때 매우 유용합니다.

8. 고급 테크닉: 리스트 성능 최적화

  • 리스트 컴프리헨션을 활용하여 반복문 최소화
  • 리스트에 append 대신 extend를 사용할 경우 더 빠른 병합 가능
  • 초기 리스트 크기 예측 후, 필요한 경우 배열 라이브러리 활용
  • collections.deque를 사용하여 빈번한 pop/append 작업 최적화

9. 잘못 사용하면 성능에 치명적인 리스트 패턴

  • 리스트 안에서 리스트를 계속 append하는 중첩 구조
  • 루프마다 슬라이싱을 반복하여 새로운 리스트를 생성
  • 반복문 안에서 `insert(0, item)`을 사용하는 prepend 방식

10. 마무리: 리스트는 도구다. 잘 다루면 무기다.

리스트는 단순한 데이터 저장 구조를 넘어, 파이썬 프로그래밍의 핵심 도구입니다. 기초적인 기능뿐 아니라 고급 기능까지 익힌다면, 복잡한 문제도 효율적으로 해결할 수 있습니다. 오늘 소개한 내용을 바탕으로 실전에서 더욱 강력한 파이썬 코드를 작성해 보세요.

참고 출처

728x90