MCP - 3일차-파이썬 정리(리스트, 세트, 튜플, 딕셔너리)

Jun·2026년 1월 25일

MCP

목록 보기
4/20

🐍 Python 집합 데이터 타입 총정리

파이썬에서 여러 개의 데이터를 담는 핵심 데이터 타입 4가지를 비교하고 정리한 내용입니다.


🟦 집합 데이터 타입 요약 비교

타입기호순서중복 허용가변성 (Mutable)
list[ ]있음허용수정 가능
tuple( )있음허용수정 불가능
set{ }없음허용 안 함수정 가능
dict{K:V}있음*Key 중복 안 함수정 가능

*참고: dict는 Python 3.7부터 Key 저장 순서가 유지됩니다.


1. List (리스트) [ ]

가장 유연하게 사용할 수 있는 데이터 타입입니다.

✅ 기본 특징

  • [ ] 대괄호로 생성하며, 원소는 콤마(,)로 구분합니다.
  • 모든 타입의 데이터를 담을 수 있습니다.
  • 리스트의 원소는 변경 가능합니다.
  • 리스트의 원소는 중복 가능합니다.

🔍 인덱싱 & 슬라이싱

  • 0-base index: 첫 번째 원소는 0부터 시작합니다.
  • 음수 인덱싱: -1마지막 원소를 의미합니다.
  • Slicing [:]: [시작:끝:증감] 형식을 사용하여 특정 범위를 추출합니다.
    없는 인덱스를 호출하면 오류가 발생합니다.

인덱싱 예시

colors = ['red', 'orange', 'blue', 'green', 'white', 'black']

colors[0:3]   # 0 부터 3 전까지 slice 

colors[:2]  # 처음부터 2 전까지 slice

colors[2:]  # 2부터 끝까지 slice

colors[:] # 전체 

colors[1:10] # 1부터 5까지만 출력

colors[10:100] # 오류아니고, 빈 리스트만 출력

colors[1:6:2]  # step  건너띄는 값.

colors[5:0:-1]  # 5부터 0 전까지 -1 step

🛠 주요 메서드 및 연산

  • .append(): 리스트 끝에 원소 추가 (원본 직접 변경), append의 결과값(리턴값)은 None
  • len(): 원소 개수 확인
  • .sort(): 오름차순 정렬 / .sort(reverse=True): 내림차순 정렬
  • list + list: 리스트 연결 / list * n: 리스트 반복

리스트 선언 예시

animals = ['dog', 'cat', 'bird', 'fish',]

animals = [
    'dog',
    'cat',
    'bird',
    'fish',
    ] #오류 아님

.sort() vs sorted()함수

# 1. sort()
animals = ['dog', 'cat', 'bird', 'fish',]
animals.sort() 

animals.sort() #['cat', 'cow', 'dog', 'fish', 'mouse'] 오름차순 정렬로 바뀜(원본변화)


# 2. sorted()
colors=['red', 'orange', 'blue', 'green', 'white', 'black']
sorted(colors) #['black', 'blue', 'green', 'orange', 'red', 'white'] 오름차순 정렬로 출력됨

colors  # 원본변화 없다! ['red', 'orange', 'blue', 'green', 'white', 'black']
# sorted는 원본 변화 없이 출력만 바꿔서 나옴. 

2. Tuple (튜플) ( )

데이터를 안전하게 보관하고 싶을 때 사용하며, 한 번 만들면 수정이 불가능합니다.

  • Immutable: 원소 변경이나 삭제가 불가능합니다.
fruits = ('apple', 'banana', 'apple', 'kiwi')

fruits[0] # apple

# fruits[0] = 'mango'  # 에러! tuple 은 immutable 하다!
  • 생성 주의: 원소가 하나인 튜플은 반드시 뒤에 콤마를 붙여야 합니다.
    (예: animals = ("dog",))

3. Set (집합) { }

수학의 집합 개념과 유사하며 중복을 허용하지 않습니다.

  • 순서 없음 : 인덱스 번호로 접근할 수 없습니다.

  • 중복 제거 : 중복된 값을 넣어도 하나만 저장됩니다.

  • 빈 세트 생성 : 반드시 set() 함수를 사용해야 합니다. ({ }는 딕셔너리로 인식)

방법1
animals = {"dog", "cat", "dog", "bird"}
animals # {'bird', 'cat', 'dog'}

a = set()
a.add('dog')

a #{'dog'}
  • 주요 메서드 : add() (추가), remove() (삭제), in (존재 여부 확인)

4. Dict (딕셔너리) {Key:Value}

키(Key)와 값(Value)의 쌍으로 데이터를 관리합니다.

✅ 특징

  • Key: 중복될 수 없으며 해시 가능한(Immutable) 타입만 가능합니다.

  • Value: 어떤 타입의 데이터든 저장할 수 있습니다.

# 딕셔너리 선언
#방법1. 
student = {"name":"손오공", "email":"son@mail.com"}

student # {'name': '손오공', 'email': 'son@mail.com'}

#방법2. {}
my_dict = {}

#방법3. dict()
my_dict = dict()

#방법4. dict(,)
my_dict = dict(host='127.0.0.1', port=3306) 

#방법5. dict([(),()])
my_dict = dict([('host', '128.0.11.5'), ('port', 8080)])


# key-value 쌍의 개수.
len(student) # 2 


# 특정 키(Key)에 연결된 값(Value)을 가져오는 방법
# 1. 인덱싱
student["name"] #손오공  /키 값이 없으면 error 발생.

# 2. get() 방식
student.get("name") #손오공  /키 값이 없어도 에러 발생안함(None 반환).

🛠 데이터 조작 및 메서드

  • dict.get(key, default): 키가 없어도 에러 없이 기본값을 반환합니다.

  • dict.update({k: v}): 해당 키의 값을 수정하거나, 없으면 새로 추가합니다.

  • del(dict[key]): 특정 키-값 쌍을 삭제합니다.

# 기존 key 값에 대입 (수정)
student['name'] = '홍길동'  

student #{'name': '홍길동', 'email': 'son@mail.com'}


# 기존에 없던 key 값에 대입 (새로운 k-v 추가)
student['address'] = '서울시' 

student #{'name': '홍길동', 'email': 'son@mail.com', 'address': '서울시'}

# 삭제
del(student['email'])

student #{'name': '홍길동', 'address': '서울시'}

# dict.update() 수정
student.update({'name':'도라에몽'})

student #{'name': '도라에몽', 'address': '서울시'}

# dict.update() 추가
student.update({'age': 13})

student #{'name': '도라에몽', 'address': '서울시', 'age': 13}

  • 구성 확인:

    • keys(): 키 목록 추출

    • values(): 값 목록 추출

    • items(): (키, 값) 튜플 쌍 목록 추출

student = {
        "name":"최현진",
        "email":"choi@mail.com",
        "age": 23,
        "addr" : "서울"
        }
        
1. keys()
student.keys()  # key 들로만 구성된 iterable 객체 리턴됨.
# dict_keys(['name', 'email', 'age', 'addr'])


list(student.keys() )
# ['name', 'email', 'age', 'addr']

2. values()
student.values()
# dict_values(['최현진', 'choi@mail.com', 23, '서울'])


3. items()
student.items()   # (key, value) 튜플 ... 들로 구성된 iterbale 객체 리턴함.
# dict_items([('name', '최현진'), ('email', 'choi@mail.com'), ('age', 23), ('addr', '서울')])
   

🛠 key, value의 타입

  • value 는 어떠한 타입이라도 가능!
  • key 는 hash 가능한 타입만 가능! (ex: int, float, str, bool, tuple..)
my_dict = {
    1: 'haha',
    2: 'hoho',
    2: 'HeHe',  # key 는 중복 불가!
    # [10, 20]: 3.14,   # list, set, dict 등은 dict 의 key 로 사용 불가!
    "two": {
        3.14: "pi",
        "pi": 3.14,
    },
    False: [10, 20, 30],
    (1, 2): 'nice',
}

my_dict[1] # haha

my_dict['two'] # {3.14: 'pi', 'pi': 3.14}

my_dict['two'][3.14] # pi

my_dict[False] # [10, 20, 30]

my_dict[(1, 2)] # nice

🟦 추가 핵심 포인트

💡 문자열(str)과 리스트

  • 문자열도 인덱싱과 슬라이싱이 가능하지만 Immutable합니다.
my_str = "hello python"
my_str[0]  # h   / index 가능!

# my_str[0] = 'Y'  # str 은 immutable(불변) 하다!
# 변경할 수 없다.!

  • join(): 리스트의 원소들을 하나의 문자열로 합칩니다.
animals=['mouse', 'fish', 'dog', 'cow', 'cat']
"--".join(animals) # mouse--fish--dog--cow--cat
  • split(): 문자열을 특정 구분자 기준으로 쪼개어 리스트로 만듭니다.
my_str = "Hello Python 2026"
# split() 에 매개변수 없이 사용하면 공백 기준으로 문자열 쪼개짐 => list 리턴
# 공백 : 띄어쓰기, 탭, 줄바꿈...

my_str.split() #['Hello', 'Python', '2026']
  • 리스트로 형변환도 가능합니다.
my_str="2026-01-20"
list(my_str) #['2', '0', '2', '6', '-', '0', '1', '-', '2', '0']

💡 다차원 리스트

  • 리스트 안에 또 다른 리스트를 포함할 수 있으며, 인덱스를 여러 개 사용하여 접근합니다
# 2차원 리스트.  -> 원소가 1차원 리스트
data = [
    [1, 2, 3],
    [10, 20, 30],
    [40, 50, 60],
]

data # [[1, 2, 3], [10, 20, 30], [40, 50, 60]]

len(data) # 3

data[0] # [1, 2, 3]

data[1][0] # [][] 인덱스를 2개 사용하여 원소 사용.  2차원 리스트

----------------------------------------------------------
# data --> 2차원 list
# data[0] --> 1차원 list
# data[0][0] --> 0차원. scalar 값.

# ※ 인덱싱을 한다는 것은 차원 -1 축소 발생

# 2차원 리스트의 원소는 1차원 리스트
# 3..           원소는 2차원..
# 99차원...     원소는 98...
# n 차원 리스트의 원소는 n-1 차원 리스트


💡 Assignment Unpacking:

  • 튜플의 값을 여러 변수에 한 번에 대입할 수 있습니다.
  • 대입연산자와 iterable 을 사용하여 여러 개의 변수에 대입 가능합니다.
    • iterable 객체
      [str, list, tuple, set, dict ...] <- iterable 객체다
 # 사각형의 가로, 세로값
rec = [100, 200]
width = rec[0]
height = rec[1] # 이렇게 값을 옮기지 말고, 


width, height = rec  # 변수들의 tuple 에 iterable 을 대입.

a, b, c = 10, 20, 30

a, b, c # (10, 20, 30)


💡 tip

None 을 리턴하는 데이터 조작함수는 원본을 변경하는 함수인 경우가 많다.

profile
Hard Trying

0개의 댓글