본문 바로가기

파이썬 자료구조 이해하기: 리스트 편

발견의끝 2024. 11. 29.

자료구조 이해하기 리스트

리스트(Lists)란 무엇인가?

리스트는 Python에서 가장 기본적이고 중요한 자료 구조 중 하나로, 다양한 데이터 타입의 항목들을 순서대로 저장할 수 있는 **가변적(mutable)**인 데이터 구조입니다. 리스트는 대괄호 []를 사용해 정의하며, 항목은 쉼표 ,로 구분합니다.

특징

  1. 순서가 있다 (Ordered): 리스트의 항목은 인덱스를 통해 접근 가능합니다.
  2. 가변성 (Mutable): 리스트는 생성 후에도 수정, 추가, 삭제가 가능합니다.
  3. 다양한 데이터 타입: 정수, 문자열, 다른 리스트 등 모든 데이터 타입을 저장할 수 있습니다.

리스트 기본 문법

# 리스트 생성
my_list = [1, 2, 3, 4, 5]

# 요소 접근
print(my_list[0])  # 출력: 1

# 요소 추가
my_list.append(6)  # [1, 2, 3, 4, 5, 6]

# 요소 제거
my_list.remove(3)  # [1, 2, 4, 5, 6]

# 슬라이싱
print(my_list[1:3])  # 출력: [2, 4]


초급 예제 10개

  1. 리스트 생성 및 요소 출력하기

fruits = ["apple", "banana", "cherry"]
print(fruits)

  1. 리스트에 요소 추가하기

numbers = [1, 2, 3]
numbers.append(4)
print(numbers)

  1. 리스트에서 특정 요소 제거하기

numbers = [1, 2, 3, 4]
numbers.remove(2)
print(numbers)

  1. 리스트 슬라이싱 이해하기

letters = ['a', 'b', 'c', 'd', 'e']
print(letters[1:4])

  1. 리스트 요소 수정하기

fruits = ["apple", "banana", "cherry"]
fruits[1] = "mango"
print(fruits)

  1. 리스트 길이 확인하기

numbers = [10, 20, 30, 40]
print(len(numbers))

  1. 리스트에서 특정 요소 찾기

fruits = ["apple", "banana", "cherry"]
print("banana" in fruits)

  1. 리스트 확장하기

list1 = [1, 2, 3]
list2 = [4, 5]
list1.extend(list2)
print(list1)

  1. 리스트 정렬하기

numbers = [3, 1, 4, 2]
numbers.sort()
print(numbers)

  1. 리스트 초기화

numbers = [1, 2, 3, 4]
numbers.clear()
print(numbers)


중급 예제 10개

  1. 2차원 리스트 생성 및 접근

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(matrix[1][2])  # 6

  1. 리스트 내포 사용하기 (List Comprehension)

squares = [x**2 for x in range(5)]
print(squares)  # [0, 1, 4, 9, 16]

  1. 리스트 요소를 조건에 따라 필터링

python
코드 복사
numbers = [1, 2, 3, 4, 5, 6]
even_numbers = [x for x in numbers if x % 2 == 0]
print(even_numbers)

  1. 리스트의 최대값과 최소값 찾기

numbers = [10, 20, 30, 40, 50]
print(max(numbers), min(numbers))

  1. 리스트를 뒤집기

numbers = [1, 2, 3, 4, 5]
numbers.reverse()
print(numbers)

  1. 리스트를 문자열로 변환

words = ["Python", "is", "fun"]
sentence = " ".join(words)
print(sentence)

  1. 리스트의 요소를 카운트

numbers = [1, 2, 2, 3, 3, 3]
print(numbers.count(3))  # 3

  1. 리스트를 중복 제거하고 정렬하기

numbers = [4, 2, 4, 3, 2, 1]
unique_numbers = sorted(set(numbers))
print(unique_numbers)

  1. 리스트 요소를 인덱스와 함께 출력

fruits = ["apple", "banana", "cherry"]
for index, fruit in enumerate(fruits):
    print(index, fruit)

  1. 리스트 병합 후 중복 제거

list1 = [1, 2, 3]
list2 = [3, 4, 5]
merged_list = list(set(list1 + list2))
print(merged_list)


고급 예제 10개

  1. 리스트에서 모든 조합 생성

from itertools import combinations
numbers = [1, 2, 3]
print(list(combinations(numbers, 2)))

  1. 리스트로 스택 구현

stack = []
stack.append(1)
stack.append(2)
stack.pop()
print(stack)

  1. 리스트로 큐 구현

from collections import deque
queue = deque([1, 2, 3])
queue.append(4)
queue.popleft()
print(queue)

  1. 리스트를 통해 이진 탐색 구현

import bisect
sorted_list = [1, 3, 4, 7, 10]
bisect.insort(sorted_list, 5)
print(sorted_list)

  1. 리스트로 연결 리스트 구현

class Node:
    def __init__(self, value):
        self.value = value
        self.next = None

  1. 리스트 내에서 가장 긴 증가하는 부분 수열 찾기

numbers = [10, 20, 10, 30, 40]

(추가적으로 알고리즘 구현 필요)

  1. 리스트에 대해 DFS/BFS 활용하기

# 그래프 탐색 문제 활용

  1. 리스트로 힙 구현

import heapq
heap = [5, 1, 3]
heapq.heapify(heap)
heapq.heappush(heap, 2)
print(heap)

  1. 리스트로 해시 테이블 만들기
hash_table = [[] for _ in range(10)]

  1. 리스트를 통한 동적 계획법 구현

def fib(n):
    dp = [0] * (n + 1)
    dp[1] = 1
    for i in range(2, n + 1):
        dp[i] = dp[i-1] + dp[i-2]
    return dp[n]


리스트를 완벽히 이해하기 위한 연습문제

  1. 리스트에서 중복된 값을 모두 제거하는 함수 구현하기
  2. 2차원 리스트를 1차원 리스트로 변환하는 함수 작성
  3. 리스트를 정렬하는 다양한 방법 구현 (버블 정렬, 퀵 정렬 등)
  4. 리스트를 사용한 간단한 데이터베이스 구조 만들기
  5. 리스트로 순열과 조합 문제 해결하기
  6. 주어진 리스트를 이용해 피보나치 수열 생성
  7. 문자열과 리스트 간의 변환을 활용한 암호화 프로그램 구현
  8. 리스트를 이용한 간단한 블록체인 구조 작성
  9. 2차원 리스트에서 특정 패턴 탐색하기
  10. 리스트로 간단한 게임 (예: 틱택토) 만들기

댓글