[1] python 기초 수업 복습
✅ 리스트 (List)
● 개념
- 순서가 있는 변경 가능한 컬렉션
- 대괄호 []를 사용해 생성
- 다양한 데이터 타입 저장 가능
- 중복 허용
● 주요 특징
- 인덱싱과 슬라이싱 가능 (list[0], list[1:3] 등)
- 리스트 안에 리스트도 포함 가능 (중첩 리스트)
● 생성 방법
fruits = ["사과", "바나나", "체리"]
numbers = list(range(1, 6)) # [1, 2, 3, 4, 5]
empty_list = []
● 리스트 컴프리헨션
squares = [x**2 for x in range(1, 6)]
● 리스트 수정
fruits = ["사과","바나나","체리"]
#요소 변경
fruits[1] = "블루베리"
#요소 추가
fruits.append("딸기")
#특정 위치에 삽입
fruits.insert(1,"포도")
#리스트 확장
more_fruits = ["키위","망고"]
fruits.extend(more_fruits)
#요소 제거
fruits.remove("체리")
#특정 위치 요소 제거 및 반환
removed = fruits.pop(2)
#리스트 정렬
fruits.sort()
#리스트 역순으로 뒤집기
fruits.reverse()
#리스트 길이
print(len(fruits))
#요소 개수 세기
fruits.count("사과")
#요소 위치 찾기
fruits.index("키위")
#리스트 내용 비우기
fruits.clear()
● enumerate
- enumerate란?
- 인덱스와 값 형태의 튜플을 반환하는 파이썬 내장 함수이다.
- zip() 함수란?
- 두 개 이상의 반복 가능한 객체의 요소들을 짝지어 튜플의 형태로 묶어주는 함수이다.
#리스트 요소와 인덱스를 함께 순회할 때 유용
fruits = ["사과",'바나나','체리','딸기']
for index,fruits in enumerate(fruits, start=1): // 시작 인덱스 지정가능
print(f"{index}번: {fruit}")
# 리스트의 특정 값 위치 찾기
blue = [i for i,color in enumerate(colors) if color == "파랑"]
#여러 리스트 동시 순회 (ZIP과 함께 사용)
names = ["Alice", "Bob", "Charlie"]
scores = [85, 92, 78]
for i,(name, score) in enumerate(zip(names,scores)), 1):
print()
● 목록 관리 프로그램
#목록 관리 프로그램
# 할 일 추가
def add_task(task):
task.append(task)
# 할 일 완료 (삭제)
def complete_task(task_index):
if 0 <= task_index < len(tasks):
completed = tasks.pop(task_index)
else:
print("잘못된 할 일 번호입니다.")
# 할 일 목록 조회
def view_tasks():
if tasks:
for i,task in enumerate(tasks):
print(f"{i+1}, {task}")
● 중첩 리스트
- 다차원 데이터를 표현할 때 유용
- 얕은 복사 - 최상위 컨테이너만 새로 생성하고, 내부 요소들은 원본과 동일한 객체를 참조한다.
- 깊은 복사 - 원본과 완전히 독립된 객체 생성, 어느 한쪽 수정해도 다른 쪽에 영향 주지 않음
row = [0] * 3
bad_matrix = [row] * 3 //row객체를 참조하는 3개의 객체 생성
bad_matrix[0][0] = 1 //모든 행의 첫 번째 요소가 1로 변경됨
#올바른 방법
good_matrix = [[0 for _ in range(3)] for _ in range(3)]
✅ 튜플 (Tuple)
● 개념
- 순서가 있는 변경 불가능한 컬렉션
- 소괄호 ()로 생성
- 다양한 데이터 타입 저장 가능
● 주요 특징
- 인덱싱, 슬라이싱 가능
- 불변성이 보장되어 안정적인 데이터 저장에 유용
● 생성 예시
tuple1 = (1, 2, 3)
tuple2 = ("apple", 3.14, True)
# 다중 반환 값 처리
def get_dimensions():
width = 800
height = 600
depth = 3
return width, height, depth #암시적 튜플 반환
# 반환값을 튜플로 받기
dimensions = get_dimensions()
print(f"튜플 : {dimenstions}")
✅ 딕셔너리 (Dictionary)
● 개념
- 키(key)-값(value) 쌍으로 구성된 컬렉션
- 중괄호 {} 사용
- 키는 불변 객체만 가능 (문자열, 숫자, 튜플 등)
- 값은 어떤 타입이든 가능
● 주요 특징
- 순서 없음
- 키를 통해 값에 직접 접근 가능 (dict["key"])
● 예시
person = {
"name": "홍길동",
"age": 25,
"email": "hong@example.com"
}
student = {"name": "홍길동", "age" : 20, "grade":"A"}
student2 = dict(name="김철수", age=22, grade="8")
items = [(),(),()]
#항목 삭제
del student["name"]
student.pop("age")
#keys() : 모든 키 반환
list(student.keys())
#value() : 모든 값 반환
list(student.values())
#items() : 키-값 쌍 반환
list(student.items())
#update(): 딕셔너리 병합/갱신
new_info = {"grade: "A", "age":21}
student.update(new_info)
#clear(): 모든 항목 삭제
temp_dict = {"temp": 1}
temp_dict.clear()
#copy(): 딕셔너리 얕은 복사
student_copy = student.copy()
- keys(),values() 응답은 list 형태임
• 타입은 dict_keys, dict_values 클래스이나 리스트로 변환 가능하다.
• Items() 응답은 tuple 형태 • 타입은 Dict_items 클래스 이나 tuple로 변환 가능
#딕셔너리 컴프리헨션
# 1. 기본 형태
squares = {x: x**2 for x in range(1,6)}
# 2. 조건부 딕셔너리 컴프리헨션
even = {x: x**2 for x in range(1,11) if x % 2 == 0}
# 3. 값 변환 예제
fruits = ['apple','banana','cherry']
fruit_lengths = {fruit: len(fruit) for fruit in fruits}
✅ 집합 (Set)
● 개념
- 중복을 허용하지 않는 순서 없는 컬렉션
- 중괄호 {} 또는 set()으로 생성
● 주요 특징
- 중복 자동 제거
- 합집합(|), 교집합(&), 차집합(-), 대칭차집합(^) 등 다양한 연산 지원
● 예시
set1 = {1, 2, 3}
set2 = {3, 4, 5}
print(set1 & set2) # 교집합: {3}
#집합 생성
# 1.중괄호로 생성
fruits = {'사과','바나나','체리'}
# 2. set() 사용
numbers = set([1,2,3,2,1]) //중복 제거됨
# 3.문자열로 생성
chars = set("hello") //{'h','e','l','o'} 이런 식으ㅓ로 생성
# 4. 빈 집합 생성 !! 여기서 빈 중괄호는 딕셔너리
empty_set = set()
not_set = {}
#집합 연산
#기본 집합 생성
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}
# 합집합 (Union): A와 B의 모든 요소
print("합집합 (A | B):", A | B) # {1, 2, 3, 4, 5, 6, 7, 8}
print("합집합 (A.union(B)):", A.union(B)) # 위와 동일
# 교집합 (Intersection): A와 B 모두에 있는 요소
print("교집합 (A & B):", A & B) # {4, 5}
print("교집합 (A.intersection(B)):", A.intersection(B)) # 위와 동일
# 차집합 (Difference): A에는 있지만 B에는 없는 요소
print("차집합 (A - B):", A - B) # {1, 2, 3}
print("차집합 (A.difference(B)):", A.difference(B)) # 위와 동일
# 대칭 차집합
A ^ B
#부분집합
C.issubset(A)
C <= A
#서로소(isdisjoint)
#집합 수정
# 기본 집합
fruits = {"사과", "바나나", "체리"}
# 요소 추가
fruits.add("딸기")
# 여러 요소 추가
fruits.update(["망고", "블루베리"])
# 요소 제거 (존재하지 않으면 오류 발생)
fruits.remove("바나나")
# 요소 제거 (존재하지 않아도 오류 없음)
fruits.discard("키위") # 없지만 오류 없음
# 임의의 요소 제거 및 반환
popped = fruits.pop()
# 모든 요소 제거
fruits.clear()
✅ 조건문 (if, elif, else)
● 개념
- 조건에 따라 코드의 실행 흐름을 제어한다.
- 들여쓰기를 통해 블록 구분
● 조건문 구조
if 조건:
실행문
elif 다른조건:
실행문
else:
실행문
● 비교 연산자
- ==, !=, >, <, >=, <=
● 멤버십 연산자
# for 루프와 함께 사용
fruits = ["사과", "바나나", "체리", "오렌지"]
for fruit in fruits:
if fruit in ["사과", "오렌지"]:
print(f"{fruit}는 과일 주스로 적합합니다.")
# 조건문과 함께 사용
user_input = "체리"
if user_input in fruits:
print(f"{user_input}는 과일 목록에 있습니다.")
else:
print(f"{user_input}는 과일 목록에 없습니다.")
● 논리 연산자
- and, or, not
- 우선순위: not > and > or
● 삼항 연산자
result = "참" if 조건 else "거짓"
● 예시
age = 20
if age >= 18:
print("성인입니다.")
elif age >= 13:
print("청소년입니다.")
else:
print("어린이입니다.")
✅ 반복문 (for, while)
● 개념
- 특정 코드를 여러 번 반복해서 실행할 수 있게 하는 구조
- 대표적인 반복문: for, while
● for 문
- 시퀀스(리스트, 문자열, 튜플 등)의 각 요소를 순회할 때 사용
fruits = ["사과", "바나나", "체리"]
for fruit in fruits:
print(fruit)
● range 함수와 함께 사용
for i in range(3):
print(i) # 0, 1, 2
● while 문
- 조건이 참인 동안 반복
count = 0
while count < 3:
print(count)
count += 1
● break & continue
- break: 반복문을 즉시 종료
- continue: 현재 반복을 건너뛰고 다음 반복으로 진행
[2] 과제 리뷰
이번 과제 중에 유일하게 오류가 난 과제에 대해서 틀린 이유와 고친 코드에 대해서 리뷰해 보겠다.
문제
틀린 코드
- 우선 사용자 이름인 key의 취미 리스트를 집합 set으로 바꾸고 반복문을 돌면서 다른 사람의 취미 list와 교집합을 찾아
존재하면 positive_list에 존재하지 않으면 negative_list에 append하여 두 개의 name key들이 담긴 list를 반환하는 함수를
구현해 보았다.
오류
오류 1: null → None
🔴 잘못된 부분
if((hobbies[x] ^ hobbies[my_name]) != null):
- null은 Python에 없는 키워드임
- Python에서는 null 대신 None을 사용해야했다.
오류 2: 리스트에 ^ 연산 사용 & set collection은 인덱싱 x
🔴 잘못된 부분
hobbies[x] ^ hobbies[my_name]
- ^ 는 set 에서 가능한 연산이다.
- 그런데 hobbies[x]는 리스트이기 때문에 바로 ^ 연산 불가능하기 때문에 set으로 변경 후 계산해야 했다.
- 그리고 ^ 이 연산자는 대칭 차집합 연산자로 한쪽에만 있는 요소들을 남기는 연산자이고
- 교집합은 & 이 연산자를 써야한다.
- set은 인덱싱으로 특정 위치에 접근할 수 없다.
✅ 수정 코드
이렇게 my name의 hobby list를 set으로 바꾸고 hobbies.items()로 각각의 key,value 요소를 불러와서 my hobby list와 set으로 변경한 other_hobbies와의 교집합을 구해 존재한다면 positive list에 존재하지 않는다면 negative list에 append하여 두 개의
list를 return하는 로직으로 구하였다.
이번주부터 파이썬 기초 수업을 들으면서 과제를 처음 풀기 전에는 쉽고 빠르게 할 수 있을 것이라고 생각하였는데 헷갈리고 잘 모르는 개념들이 많았다. 파이썬 기초 문법들과 tuple,list,dictionary,set등 각각 사용하는 방법과 특징들에 대해 좀 더 확실하게 개념을 잡고 가야겠다는 생각이 들었다.
본 후기는 [카카오엔터프라이즈x스나이퍼팩토리] 카카오클라우드로 배우는 AIaaS 마스터 클래스 (B-log) 리뷰로 작성 되었습니다.
'카카오클라우드 AIaaS 교육 > AIaaS를 위한 머신러닝&AI' 카테고리의 다른 글
| [스나이퍼팩토리] AIaaS 마스터 클래스 9주차 DAY 42 - python 심화 (0) | 2025.05.27 |
|---|---|
| [스나이퍼팩토리] AIaaS 마스터 클래스 9주차 DAY 43 - numpy,pandas (0) | 2025.05.26 |
| [스나이퍼팩토리] AIaaS 마스터 클래스 9주차 DAY 41 - python 심화 (0) | 2025.05.26 |
| [스나이퍼팩토리] AIaaS 마스터 클래스 9주차 DAY 40 - python 심화 (1) | 2025.05.26 |
| [python 기초] 과제 (1) | 2025.05.22 |