본문 바로가기
개발/파이썬

파이썬 변수 타입의 기초

by wusdlqslek 2025. 2. 3.

1. 파이썬은 변수 선언 시에 자료형을 지정하지 않아도 되며, 자동으로 파이썬이 타입을 결정한다.

이를 동적 타이핑이라고 한다.

 

2. 파이썬 기본 데이터 타입

타입 설명 예시
int Integer 10, -5 , 1000
float Floating Point 3.14, -0.5
str String "Python"
bool Boolean True, False
list List [1, 2, 3], ["a", "b", "c"]
tuple Tuple (1, 2, 3), ("a", "b")
dict Dictionary {"Lang" : "Python", "Level":1}
set set {1, 2, 3, 4}
NoneType None None

 

 

3. 정수형(int)

# 크기에 제한이 없다
a = 10
b = -5
c = 2**100
print(c)

 

4. 실수형(float)

# 소수점을 포함하며, 지수 표현 e를 사용할 수 있다.
a = 3.14
b = 1.2e3 #1.2 * 10^3
print(b)

 

5. 문자열(str)

# ', "로 감싼 문자열

a = "Hello"
print(s + " Wolrd) # 문자열 연결 방법

 

6.  불리언(bool)

#True, False 값을 가진다

flag = True
print(flag and False) 

"""
파이썬 논리 연산자
and, or, not
"""

 

7. 리스트(list)

# 여러 데이터를 순서대로 저장하는 자료형
"""
수정 가능한 데이터 타입이다
"""

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

# 요소 추가
numbers.append(6)        # 끝에 추가: [1, 2, 3, 4, 5, 6]
numbers.insert(0, 0)    # 지정 위치에 추가: [0, 1, 2, 3, 4, 5, 6]
numbers.extend([7, 8])  # 리스트를 확장: [0, 1, 2, 3, 4, 5, 6, 7, 8]

# 요소 제거
numbers.pop()           # 마지막 요소 제거하고 반환
numbers.pop(0)         # 인덱스 0의 요소 제거하고 반환
numbers.remove(5)      # 값이 5인 첫 요소 제거
numbers.clear()        # 모든 요소 제거

# 검색과 정렬
numbers = [3, 1, 4, 1, 5, 9, 2]
numbers.index(4)       # 값이 4인 요소의 인덱스 반환
numbers.count(1)       # 값이 1인 요소의 개수 반환
numbers.sort()         # 오름차순 정렬: [1, 1, 2, 3, 4, 5, 9]
numbers.sort(reverse=True)  # 내림차순 정렬
numbers.reverse()      # 리스트 순서 뒤집기

# 복사
numbers_copy = numbers.copy()  # 리스트 복사

# 기타 유용한 내장 함수들
len(numbers)          # 리스트 길이
sum(numbers)          # 모든 요소의 합
max(numbers)          # 최대값
min(numbers)          # 최소값

# 슬라이싱 기본 개념
# 기본 문법: list[시작:끝:단계]
# - 시작 인덱스: 포함
# - 끝 인덱스: 미포함
# - 단계: 건너뛸 간격

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

# 기본 슬라이싱
print(numbers[1:4])    # [1, 2, 3]
# 인덱스 1부터 3까지 추출 (4는 미포함)

# 처음부터 슬라이싱
print(numbers[:3])     # [0, 1, 2]
# 처음부터 인덱스 2까지

# 끝까지 슬라이싱
print(numbers[2:])     # [2, 3, 4, 5]
# 인덱스 2부터 끝까지

# 단계 지정 슬라이싱
print(numbers[::2])    # [0, 2, 4]
# 처음부터 끝까지 2칸씩 건너뛰며 추출

# 슬라이싱 실제 사용 예시
logs = ["2024-02-01 로그인", "2024-02-02 결제", "2024-02-03 로그아웃"]
recent_logs = logs[-3:]    # 최근 3개의 로그만 보기
# ["2024-02-01 로그인", "2024-02-02 결제", "2024-02-03 로그아웃"]

email = "user@example.com"
domain = email[email.index("@")+1:]  # 이메일에서 도메인만 추출
# "example.com"

phone = "010-1234-5678"
masked_phone = phone[:-4] + "****"   # 전화번호 뒷자리 마스킹
# "010-1234-****"


# 컴프리헨션 기본 개념
# 기본 문법: [표현식 for 항목 in 반복가능객체 if 조건식]
# - 반복문과 조건문을 한 줄로 작성할 수 있게 해주는 기능
# - 리스트를 생성하는 간단하고 효율적인 방법

# 1. 기본 형태
numbers = [1, 2, 3, 4, 5]
squares = [x**2 for x in numbers]
# [1, 4, 9, 16, 25]
# 일반 반복문으로는:
# squares = []
# for x in numbers:
#     squares.append(x**2)

# 2. 조건문 추가
even_squares = [x**2 for x in numbers if x % 2 == 0]
# [4, 16]
# 일반 반복문으로는:
# even_squares = []
# for x in numbers:
#     if x % 2 == 0:
#         even_squares.append(x**2)

# 3. 중첩 반복문
matrix = [[1, 2], [3, 4]]
flattened = [num for row in matrix for num in row]
# [1, 2, 3, 4]
# 일반 반복문으로는:
# flattened = []
# for row in matrix:
#     for num in row:
#         flattened.append(num)

# 컴프리헨션 실제 사용 예시
prices = [1000, 2000, 3000, 4000, 5000]
# 쇼핑몰에서 20% 할인된 가격 계산
sale_prices = [price * 0.8 for price in prices]  
# [800.0, 1600.0, 2400.0, 3200.0, 4000.0]

scores = [85, 92, 78, 90, 87]
# 성적 관리 시스템에서 90점 이상인 학생 필터링
high_scores = [score for score in scores if score >= 90]
# [92, 90]

files = ["doc.txt", "image.jpg", "data.csv", "photo.jpg"]
# 이미지 파일만 필터링 (파일 관리 시스템)
image_files = [file for file in files if file.endswith('.jpg')]
# ["image.jpg", "photo.jpg"]

users = [
   {"name": "Kim", "age": 25},
   {"name": "Lee", "age": 30},
   {"name": "Park", "age": 35}
]
# 회원 관리 시스템에서 이름만 추출
names = [user["name"] for user in users]
# ["Kim", "Lee", "Park"]

 

8. 튜플(tuple)

# 튜플 생성
numbers = (1, 2, 3)
single_item = (1,)      # 요소가 1개일 때는 콤마 필수
empty = ()             # 빈 튜플

# 수정 불가능
numbers[0] = 5         # TypeError 발생!

# 패킹과 언패킹
coordinates = (3, 4)   # 패킹
x, y = coordinates     # 언패킹

# 나머지 값 한번에 언패킹하기 (*)
first, *rest = (1, 2, 3, 4, 5)
print(first)  # 1
print(rest)   # [2, 3, 4, 5]
numbers = (1, 2, 2, 3, 4, 5)

# 검색 관련
numbers.index(2)       # 값 2의 첫 번째 인덱스: 1
numbers.count(2)       # 값 2의 개수: 2

# 기타 내장 함수
len(numbers)          # 튜플 길이: 6
max(numbers)          # 최대값: 5
min(numbers)          # 최소값: 1
sum(numbers)          # 합계: 17

# 1. 좌표 시스템
point = (3, 4)
x, y = point  # 언패킹

# 2. 함수에서 여러 값 반환
def get_user_info():
    return ("Jyun", "jyun@email.com")

name, age, email = get_user_info()

# 3. 딕셔너리 키로 사용 (리스트는 불가능)
locations = {
    (37.5665, 126.9780): "서울",
    (35.1796, 129.0756): "부산"
}

# 4. 데이터 무결성이 필요한 경우
DAYS = ("월", "화", "수", "목", "금", "토", "일")
MONTHS = tuple(range(1, 13))  # (1, 2, ..., 12)

# 튜플의 장점
# 1. 메모리 효율성
# - 튜플이 리스트보다 메모리를 적게 사용

# 2. 실수로 인한 데이터 변경 방지
SETTINGS = (1920, 1080)  # 화면 해상도

# 3. 더 빠른 실행 속도
# - 불변성 때문에 리스트보다 처리가 빠름

# 4. 딕셔너리 키로 사용 가능
cache = {
    (1, 2): "some_value",
    # [1, 2]: "error"  # 리스트는 키로 사용 불가
}

# 튜플은 아래와 같은 경우에 주로 사용된다
# 1. 변경되면 안 되는 데이터
# 2. 함수의 반환 값
# 3. 딕셔너리의 키
# 4. 좌표나 RGB 색상값 같은 관련 데이터의 그룹화 등

 

9. 딕셔너리(dict)

# 딕셔너리 생성
user = {
    "name": "Choe",
    "Lang": "Python"    
}

# 빈 딕셔너리 생성
empty_dict = {}
empty_dict2 = dict()

# 주의할 점
# 키는 반드시 불변(immutable) 타입이어야 함
valid_dict = {
    "string": 1,     # 문자열 키 (OK)
    (1, 2): 2,      # 튜플 키 (OK)
    1: 3            # 숫자 키 (OK)
}

invalid_dict = {
    [1, 2]: 1       # 리스트는 키가 될 수 없음 (Error)
}

# 주요 메서드
user = {"name": "Choe", "Lang": "Python"}

# 값 추가/수정
user["city"] = "Bucheon"    # 새로운 키-값 추가
user["Game"] = "LostArk"    # 기존 값 수정

# 값 삭제
del user["Lang"]         # 특정 키-값 쌍 삭제
user.pop("city")         # 키-값 쌍 삭제하고 값 반환
user.clear()             # 모든 키-값 쌍 삭제

# 검색
print(user.get("name"))     # 값 가져오기 (키가 없으면 None 반환)
print(user.get("hobby", "없음"))  # 키가 없을 때 기본값 지정

# 키, 값, 쌍 가져오기
print(user.keys())      # 모든 키
print(user.values())    # 모든 값
print(user.items())     # 모든 키-값 쌍

# 딕셔너리 컴프리헨션
# 1부터 5까지의 제곱수 딕셔너리
squares = {x: x**2 for x in range(1, 6)}
# {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

# 조건부 딕셔너리 생성
even_squares = {x: x**2 for x in range(1, 6) if x % 2 == 0}
# {2: 4, 4: 16}

# 사용 예시
messages = {
    "ko": {"welcome": "환영합니다"},
    "en": {"welcome": "Welcome"},
    "ja": {"welcome": "ようこそ"}
}

 

10. 집합(set)

# 중복을 허용하지 않고, 순서가 없는 자료형이다

# 집합 생성
numbers = {1, 2, 3, 3, 4, 4, 5}  # {1, 2, 3, 4, 5} (중복 제거됨)
fruits = {'apple', 'banana', 'orange'}

# 빈 집합 생성
empty_set = set()      # 주의: {}는 빈 딕셔너리가 됨!

# 다른 자료형으로부터 집합 생성
list_to_set = set([1, 2, 2, 3])  # {1, 2, 3}
text_to_set = set("Hello")       # {'H', 'e', 'l', 'o'}

# 집합은 순서가 없음
set1 = {3, 1, 4, 1, 5}
print(set1)  # 출력 순서가 입력 순서와 다를 수 있음

# 집합은 불변(immutable) 요소만 포함 가능
valid_set = {1, "hello", (1, 2)}    # OK
invalid_set = {1, [2, 3], {4, 5}}   # Error

# 집합 연산
A = {1, 2, 3, 4}
B = {3, 4, 5, 6}

# 합집합
print(A | B)          # {1, 2, 3, 4, 5, 6}
print(A.union(B))     # 위와 동일

# 교집합
print(A & B)          # {3, 4}
print(A.intersection(B))  # 위와 동일

# 차집합
print(A - B)          # {1, 2}
print(A.difference(B))  # 위와 동일

# 대칭 차집합 (합집합 - 교집합)
print(A ^ B)          # {1, 2, 5, 6}
print(A.symmetric_difference(B))  # 위와 동일

# 주요 메서드
numbers = {1, 2, 3}

# 요소 추가/제거
numbers.add(4)        # 요소 추가
numbers.remove(2)     # 요소 제거 (없으면 에러)
numbers.discard(2)    # 요소 제거 (없어도 에러 없음)
numbers.pop()         # 임의의 요소 제거하고 반환
numbers.clear()       # 모든 요소 제거

# 집합 관계 확인
A = {1, 2, 3}
B = {1, 2, 3, 4}
print(A.issubset(B))      # A가 B의 부분집합인가?
print(B.issuperset(A))    # B가 A를 포함하는가?
print(A.isdisjoint(B))    # A와 B는 교집합이 없는가?

# 실제 사용 예시
# 1. 중복 제거
numbers = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
unique_numbers = list(set(numbers))  # [1, 2, 3, 4]

# 2. 친구 관계 분석
user1_friends = {"Kim", "Lee", "Park"}
user2_friends = {"Lee", "Choi", "Kim"}
common_friends = user1_friends & user2_friends  # 공통 친구

# 3. 태그 시스템
post1_tags = {"python", "coding", "tutorial"}
post2_tags = {"python", "django", "web"}
all_tags = post1_tags | post2_tags  # 모든 태그

# 4. 권한 관리
admin_permissions = {"read", "write", "delete"}
user_permissions = {"read", "write"}
if user_permissions.issubset(admin_permissions):
    print("Valid permissions")
    
# 집합 컴프리헨션
# 짝수 집합 생성
evens = {x for x in range(10) if x % 2 == 0}
# {0, 2, 4, 6, 8}

# 문자열에서 모음만 추출
vowels = {char for char in "Hello World" if char.lower() in 'aeiou'}
# {'e', 'o'}
반응형

'개발 > 파이썬' 카테고리의 다른 글

파이썬 기본 제어 구조  (0) 2025.02.06
파이썬 기본 변수 활용 연습 문제  (1) 2025.02.04

댓글