5.27 PYTHON | DAY2 | 2회차 톺아보기

아뇨 민균데요·2025년 5월 27일
0
post-thumbnail

Today I learned !

by performance marketer ni orewa naru


🔐학습 키워드

리스트, 튜플, 딕셔너리 | 파이썬의 뼈대를 이루는 3대장 기초 문법 마스터 🧱

📖오늘 학습 내용

📍2주차 [파이썬의 뼈대 - 리스트, 튜플, 딕셔너리]

  • 리스트란?
  • 인덱싱, 슬라이싱, 메서드
  • 튜플의 특성과 사용법
  • 딕셔너리 키-값 구조
  • 실전 예시와 Quiz

📦리스트(List)

✅ 리스트는 가변형 시퀀스 타입

순서가 있는 여러 데이터를 한 번에 저장 가능. [] 대괄호 사용

numbers = [1, 2, 3, 4, 5]

🔍 인덱싱(Indexing)

리스트의 특정 위치에 접근하고 싶을 때 사용. 0부터 시작

my_list = ['a', 'b', 'c', 'd', 'e']

print(my_list[0])   # 'a' (첫 번째 요소)
print(my_list[2])   # 'c' (세 번째 요소)
print(my_list[-1])  # 'e' (마지막 요소)
print(my_list[-2])  # 'd' (끝에서 두 번째)

참고: 인덱스 음수를 쓰면 뒤에서부터 센다


✂ 슬라이싱(Slicing)

리스트에서 일부분을 잘라서 추출할 수 있음
문법: 리스트[시작:끝:간격]
끝 인덱스는 포함되지 않음 (반-열림 구간)

nums = [10, 20, 30, 40, 50, 60, 70]

print(nums[2:5])     # [30, 40, 50]
print(nums[:3])      # [10, 20, 30] (처음부터)
print(nums[4:])      # [50, 60, 70] (끝까지)
print(nums[::2])     # [10, 30, 50, 70] (2칸씩 건너뛰기)
print(nums[::-1])    # [70, 60, 50, 40, 30, 20, 10] (역순)

슬라이싱은 리스트 복사에도 자주 쓰임

copy_nums = nums[:]

🧰 리스트 메서드(Method) 완전 정복

리스트는 매우 다양한 기능을 내장함. 대표 메서드와 예제는 아래와 같음:

추가 / 삽입

my_list = [1, 2, 3]
my_list.append(4)        # 끝에 추가 → [1, 2, 3, 4]
my_list.insert(1, 99)    # 인덱스 1에 삽입 → [1, 99, 2, 3, 4]
my_list.extend([5, 6])   # 다른 리스트 추가 → [1, 99, 2, 3, 4, 5, 6]

삭제

my_list.remove(99)       # 값으로 삭제 → [1, 2, 3, 4, 5, 6]
my_list.pop()            # 마지막 요소 제거 및 반환 → [1, 2, 3, 4, 5]
my_list.pop(2)           # 인덱스 2 요소 제거 및 반환 → [1, 2, 4, 5]
del my_list[0]           # 첫 번째 요소 삭제 → [2, 4, 5]
my_list.clear()          # 전체 삭제 → []
my_list = [1,33,66,77,88,99]
popped_list = my_list.pop(2) #66 반환
print(popped_list)
print(my_list)

검색 / 개수 세기

colors = ['red', 'blue', 'red', 'green']
print(colors.index('green'))   # 3 (첫 등장 위치)
print(colors.count('red'))     # 2 (총 등장 횟수)

정렬 / 뒤집기

nums = [3, 1, 4, 2]
nums.sort()                    # 오름차순 정렬 → [1, 2, 3, 4]
nums.sort(reverse=True)        # 내림차순 정렬 → [4, 3, 2, 1]
nums.reverse()                 # 현재 순서를 뒤집음 → [1, 2, 3, 4]

참고: sort()는 원본을 바꾸고, sorted()는 원본 유지하고 새 리스트 반환


📍 슬라이싱으로 리스트 조작

print(my_list[::2])       # 짝수 인덱스
print(my_list[::-1])      # 역순

🔐튜플(Tuple)

좋아! 이번엔 튜플(Tuple) 파트를 아까 리스트처럼 포맷 통일해서 정리해줄게. 인덱싱, 슬라이싱, 메서드, 변환, 실전 예시까지 쫙 정리했어.


🍊 튜플(Tuple)

✅ 튜플이란?

변경할 수 없는 시퀀스 자료형. 소괄호 () 사용.
한 번 만들면 값 추가, 삭제, 수정 불가 → 데이터 불변성 보장

my_tuple = (1, 2, 3, 'hello', 'world')

🔍 인덱싱(Indexing)

리스트처럼 요소에 순서대로 접근 가능. 0부터 시작

print(my_tuple[0])    # 1
print(my_tuple[-1])   # 'world' (끝 요소)

✂ 슬라이싱(Slicing)

튜플의 일부분을 잘라서 새로운 튜플처럼 반환 가능

print(my_tuple[1:4])  # (2, 3, 'hello')
print(my_tuple[:3])   # (1, 2, 3)
print(my_tuple[::2])  # (1, 3, 'world')

슬라이싱 결과도 튜플임. 원본은 그대로 유지됨!


🧰 자주 쓰는 튜플 메서드

튜플은 immutable이라 리스트처럼 메서드가 다양하진 않지만
몇 가지 기본 기능은 있음

t = (1, 2, 3, 2, 1)

print(t.count(1))    # 2 (값 1이 몇 번 나오는지)
print(t.index(3))    # 2 (값 3의 첫 번째 위치)

🔄 튜플 <-> 리스트 변환

튜플은 수정 안 되니 가끔 리스트로 바꿔서 처리함

# 튜플 → 리스트
t = (10, 20, 30)
l = list(t)           # [10, 20, 30]

# 리스트 → 튜플
l2 = ['a', 'b', 'c']
t2 = tuple(l2)        # ('a', 'b', 'c')

🧪 실전 예시

개인정보변하면 안 되는 데이터를 튜플로 저장함

user_info = ('Alice', 28, 'alice@example.com')

또는 두 튜플을 합치거나 반복할 수 있음

a = (1, 2)
b = (3, 4)
print(a + b)         # (1, 2, 3, 4)

print(a * 3)         # (1, 2, 1, 2, 1, 2)

불변성(immutable) 때문에 개인정보 등 데이터 보호에 적합!

튜플은 리스트보다 심플하지만, 제약이 있는 만큼 안정성이 있다는 게 포인트


📚 딕셔너리(Dictionary)

✅ 딕셔너리란?

Key : Value 쌍으로 데이터를 저장하는 구조
중괄호 {} 사용, 키는 중복 불가, 값은 중복 가능
매우 빠르게 검색 가능 (해시 테이블 기반)

my_dict = {
    'name': 'Alice',
    'age': 30,
    'city': 'Seoul'
}

🧷 딕셔너리 생성 & 접근

# 값 접근
print(my_dict['name'])     # 'Alice'

# 값 변경
my_dict['age'] = 31

# 새 항목 추가
my_dict['email'] = 'alice@example.com'

# 항목 삭제
del my_dict['city']

🧰 자주 쓰는 딕셔너리 메서드

📍 항목 조회

print(my_dict.keys())      # dict_keys(['name', 'age', 'email'])
print(my_dict.values())    # dict_values(['Alice', 31, 'alice@example.com'])
print(my_dict.items())     # dict_items([('name', 'Alice'), ('age', 31), ('email', 'alice@example.com')])

📍 get(): 안전한 조회

없는 키를 조회하면 에러 대신 None 반환

print(my_dict.get('city'))          # None
print(my_dict.get('city', '없음'))  # '없음'

📍 pop(), popitem(): 삭제 + 반환

email = my_dict.pop('email')      # 'alice@example.com'
print(email)

last = my_dict.popitem()          # 튜플 형태 반환 (마지막 항목)
print(last)

💡 실전 예시

사용자 정보 저장

user = {
    'username': 'john_doe',
    'email': 'john@example.com',
    'age': 30,
    'is_active': True
}

제품 카탈로그 (중첩 구조)

products = {
    '1001': {'name': 'Keyboard', 'price': 20.99},
    '1002': {'name': 'Mouse', 'price': 15.50},
    '1003': {'name': 'Monitor', 'price': 199.99}
}

일정 관리

events = {
    '2024-06-01': ['회의', '업무정리'],
    '2024-06-02': ['보고서 작성', '피드백 회의']
}

복잡한 데이터를 키 기반으로 빠르게 관리할 수 있다는 점이 딕셔너리의 가장 큰 장점!


🧪QUIZ

리스트

  • 다음 리스트에서 세 번째 요소를 출력 하세요.
my_list = [10, 20, 30, 40, 50]

my_list[2]
  • 다음 리스트에 60을 추가하세요
my_list = [10, 20, 30, 40, 50]
my_list.append(60)
print(my_list)
  • 다음 리스트의 길이를 출력하세요
my_list = ['apple', 'banana', 'orange', 'grape']
print(len(my_list))
  • 다음 리스트의 마지막 요소를 제거하세요
my_list = ['car', 'bus', 'bike', 'train']
my_list.pop()
print(my_list
  • 다음 리스트를 역순으로 출력하세요
my_list = ['red', 'green', 'blue', 'yellow']
my_list[-1]
print(my_list)

튜플

  • 다음 튜플에서 세 번째 요소를 출력하세요
my_tuple = (10, 20, 30, 40, 50)
print(my_tuple[2])
  • 다음 튜플의 길이를 출력 하세요
my_tuple = ('apple', 'banana', 'orange', 'grape')
print(len(my_tuple))
  • 다음 튜플을 역순으로 출력하세요.
my_tuple = ('red', 'green', 'blue', 'yellow')
print(my_tuple[-1])
  • 다음 튜플을 리스트로 변환하세요.
my_tuple = (1, 2, 3, 4, 5)
list(my_tuple)
Print(type(my_tuple))
  • 다음 튜플과 다른 튜플을 연결하여 새로운 튜플을 만드세요
my_tuple1 = ('a', 'b', 'c')
my_tuple2 = ('d', 'e', 'f')
my_tuple3 = my_tuple1 + my_tuple2
print(my_tuple3)

딕셔너리 활용 퀴즈

  • 다음 딕셔너리에서 'name'에 해당하는 값을 출력하세요.
my_dict = {'name': 'Alice', 'age': 30, 'city': 'New York'}
print(my_dict[name])
  • 다음 딕셔너리에 'gender'를 추가하세요.
my_dict = {'name': 'Bob', 'age': 25, 'city': 'Los Angeles'}
my_dict['gender']='girl'
print(my_dict)
  • 다음 딕셔너리의 길이를 출력하세요.
my_dict = {'a': 100, 'b': 200, 'c': 300}
print(len(my_dict))
  • 다음 딕셔너리에서 'age'를 제거하세요
my_dict = {'name': 'Charlie', 'age': 35, 'city': 'Chicago'}
madic=my_dict.pop('age')
print(my_dict)
profile
this man을 꿈 속에서 보신 적이 있으신가요?

0개의 댓글