SKN/01. python

01. 변수와 자료형

claovy☘️ 2025. 2. 18. 21:05

01. 변수

1. 변수

  • 프로그램에서 다루는 어떤 자료를 담는 공간
  • (변수명) (대입연산자) (자료)

2. 변수 생성

  • 변수 생성은 대입 연산자 = 을 기준으로 좌항에는 변수의 이름, 우항에는 변수에 담을 자료를 작성한다
  • 파이썬은 변수 공간의 자료형 선언이 없다

3. 대입 연산자

  • 일반적인 수학 기호에서 ‘같다’를 의미하는 등호(=)가 파이썬에서는 대입 연산자로 사용된다.
  • 대입 연산자를 기준으로 우항에 있는 값을 좌항의 변수 공간에 대입하는 의미를 가진다
  • 대입 연산자의 우항에도 변수명이 올 수 있는데, 이때 변수명은 공간이 아닌 값으로 인식한다

4. 변수 이름 명명규칙

  • 암묵적 규칙
    • 변수명은 변수에 담긴 값이 무엇인지 직관적으로 알 수 있게끔 짓는다
    • 변수명은 스네이크 케이스(소문자+언더바)로 작성하며, 대소문자를 구별한다
    • 한글 변수명을 지정할 수 있지만 지양하자
  • 명시적 규칙
    • 영문과 숫자를 혼합해 작성할 수 있지만, 숫자를 가장 앞에 작성할 수 없다
    • 언더바(_)를 제외한 특수 문자는 사용 불가
    • 파이썬 예약어(if, elif, else, for, while, …)를 사용할 수 없다

02. 변수와 자료형

1. 숫자형

  • int(자료형) : 문자형이나 숫자형 중 실수를 정수으로 형 변환하는 함수
  • float : 실수(부동소수점) 값을 가지는 자료형
  • complex : 복소수 값을 가지는 자료형

2. 논리형

  • 참, 거짓을 표현하는 자료형으로 True,False를 사용
  • 논리연산 : AND, OR, NOT

3. 문자형

  • 문자열 선언 : “” 또는 ‘’를 사용하여 자료를 선언한다
  • 문자열 이어붙이기, 반복하기 + *
  • 문자열의 메서드 : replace, strip, upper, lower, capitalize, swapcase, title
  • 문자열 포맷팅 : %포맷팅, format(), f-string

4. 주석

  • 한 줄 주석 : # (ctrl / )
  • 여러 줄 주석 : “””

5. 자료형 변환

  • 암시적 형 변환
    • 실수는 정수로 처리
  • 명시적 형 변환
    • int : 문자형이나 숫자형 중 실수를 정수으로 형 변환하는 함수
    • float : 문자형이나 숫자형 중 정수를 실수로 형 변환하는 함수
    • str : 숫자형, 리스트, 튜플, 딕셔너리 등의 자료형을 문자로 형 변환하는 함수
    • list : 문자열, 튜플, 딕셔너리 등의 자료형을 리스트로 형 변환하는 함수

03. 리스트

1. 리스트란

일련의 값이 모인 집합을 다루기 위한 자료형으로 python은 배열과 같은 표현식을 갖지만, 일반적인 프로그래밍 언어와 다르게 길이를 동적으로 조절할 수 있어 list라고 부른다.

 

 

2. 리스트 표현식

리스트명 = ['값1', '값2', ... ]
  • List의 각 요소의 자료형은 무엇이든 될 수 있으며, 서로 다른 자료형이어도 괜찮다.
  • List에 저장되는 요소들은 0부터 시작하는 인덱스 체계로 구분해서 저장된다.

3. 문자열 split

  • split()을 사용하여 문자열을 구분자 기준으로 분리한 List로 만들 수 있다.
**rainbow_split = '빨-주-노-초-파-남-보'
print(rainbow_split.split('-'))**

4. list() 메서드 → list 안의 list를 만들 수 있다

5. list 연산

  • 리스트 합치기 +
  • 리스트 반복 *
  • count, index, reverse, append, insert, sort, remove, pop 메소드를 사용할 수 있다

6. list의 인덱스, 슬라이싱


04. 튜플

1. 튜플이란

여러 개의 값을 하나의 데이터 구조로 묶어서 관리할 수 있는 불변(immutable) 시퀀스이다. 리스트와 유사하지만, 한번 생성되면 각 요소 값을 생성하거나 수정, 삭제할 수 없다. 주로 데이터의 집합을 안전하게 유지하거나, 함수에서 여러 값을 반환할 때 사용된다.

 

2. 튜플 표현식

튜플명 = ('값1', '값2', ... )

tuples = (1, 2, 'hello'), ('test', 1,2,3,4)
print(tuples)          # ((1, 2, 'hello'), ('test', 1, 2, 3, 4))
print(tuples[0])       # (1, 2, 'hello')
print(tuples[0][0])    # 1

no_wrap_tuples = 1, 2, 3    # 소괄호로 감싸지 않아도 튜플로 생성

3. 튜플의 연산 = “불변 객체”

  • 튜플은 불변 객체이므로 요소 값을 한번 할당하면 추가, 수정, 삭제가 불가하다.
testList  = (1,2,3,4)
print(id(testList))    # 1952413712848

testList = (3,4,5)
print(id(testList))    # 1952407991360
  • 튜플 요소의 변경이 아닌 튜플 간 연산은 가능하다.
# 튜플 합치기
another_safari_tuple = ("Monkey", "Tiger", "Wolf")
print(safari_tuple + another_safari_tuple)    # ('Bear', 'Koala', 'Gorilla', 'Squirrel', 'Monkey', 'Tiger', 'Wolf')

# 튜플 반복
print(safari_tuple * 3)    # ('Bear', 'Koara', 'Gorilla', 'Squirrel', 'Bear', 'Koala', 'Gorilla', 'Squirrel', 'Bear', 'Koala', 'Gorilla', 'Squirrel')

# 튜플의 길이
print(len(safari_tuple + another_safari_tuple))    # 7

05. 시퀀스 자료형의 연산 및 내장 함수

1. In

  • ‘값 in 시퀀스 자료형’의 형태로 사용하며, 우항의 시퀀스 자료형에 좌항의 값이 포함되어 있으면 True를 반환한다.
    • 문자열에 대한 in 연산은 우항의 문자열에 좌항의 문자열이 순서에 맞게 포함된 경우 True를 반환한다.
    • 리스트와 튜플에 대한 in 연산은 좌항의 요소를 우항의 자료에 대한 ‘하나의 요소’로 보기 때문에 인덱싱 또는 슬라이싱한 형태로 데이터를 주면 안된다. 요소 자체로 in 을 판단하기 때문이다.
# 문자열
address = '대한민국 서울시 서초구'
print('대한민국' in address)       # True
print('국민한대' in address)       # False
print('서울시서초구' in address)    # False

# 리스트
location = ['서울특별시', '부산광역시', '인천광역시', '광주광역시', '울산광역시']
print('광주광역시' in location)                   # True
print(['광주광역시', '부산광역시'] in location)    # False
print(['서울특별시', '부산광역시'] in location)    # False

# 튜플
nation = ('대한민국', '미국', '중국', '일본', '프랑스')
print('미국' in nation)                 # True
print(('대한민국', '미국') in nation)    # False

2. len

  • 인자로 전달한 시퀀스 자료형의 요소의 갯수(문자열의 길이, 리스트의 요소 갯수)를 반환한다.
# 문자열
address = '대한민국 서울시 서초구'
print(len(address))    # 12

# 리스트
location = ['서울특별시', '부산광역시', '인천광역시', '광주광역시', '울산광역시']
print(len(location))    # 5

# 튜플
nation = ('대한민국', '미국', '중국', '일본', '프랑스')
print(len(nation))    # 5

06. 셋(Set)

1. 셋이란

중복된 요소를 허용하지 않으며 순서 없이 요소를 저장하는 컬렉션이다. 따라서 중복 제거가 필요할 때 유용하게 사용할 수 있다.

2. 셋 표현식

  • {}를 사용해서 집합을 생성한다
# 문자열로 집합 생성
safari_set = {"Bear", "Koala", "Gorilla", "Squirrel"}

# 숫자 집합
numbers = {1, 2, 3, 4, 5}

# 혼합된 타입 집합
mixed_set = {1, "Bear", (1, 2, 3)}
  • set을 사용해 형 변환도 가능하다
# 리스트로 집합 생성
another_safari_set = set(["Monkey", "Tiger", "Wolf"])

3. 셋의 특징

  1. 순서가 없는 자료형이며, 순서가 없으므로 인덱스를 사용한 접근이 불가능하다.
  2. 중복을 허용하지 않으므로 동일한 값은 하나만 저장된다.
  3. 가변성을 가진 자료형으로 데이터, 즉 요소를 추가하거나 제거할 수 있다.
  4. 다양한 데이터 타입을 지원한다.
  5. 수학적 집합 연산(합집합, 교집합, 차집합 등)을 지원한다.
  6. 키워드를 통해 포함 여부를 반환 받을 수 있다.

4. 셋의 메서드(요소제어)

  • add : 값 추가
  • update : 값 추가
  • remove : 값 제거(값없으면 에러 X)
  • discard : 값 제거(값없어도 에러 X)
  • pop : 랜덤 값 제거
  • clear : 모든 값 제거

5. 셋의 메서드(집합연산)

  • union : 합집합
  • intersection : 교집합
  • difference : 차집합
  • symmetric_difference : 대칭 차집합

07. 딕셔너리

1. 딕셔너리란

💡 키(key)와 값(value)의 쌍으로 구성된 자료형(데이터 구조)로, 키를 통해 값을 찾을 수 있으므로 매우 빠른 조회 성능을 보여준다. 연관 배열(associative array) 또는 해시(hash)라고도 한다.

 

2. 딕셔너리 표현식

딕셔너리명 = { 키1: 값1, 키2: 값2, ... }

teacher = {'name': 'bear', 'team': 'ohgiraffers'}

print(type(teacher))    # <class 'dict'>

# key 값을 활용한 value 탐색
print(teacher['name'])    # bear
print(teacher['team'])    # ohgiraffers

3. 딕셔너리 특징

  1. 키(key)와 값(value)의 쌍으로 구성된다.
  2. 키는 고유해야 하며 불변(immutable)한 데이터 타입이어야 한다.
  3. Dictionaries는 가변적인 자료구조이다.
  4. 빠른 조회와 수정이 가능하다.
  5. del 키워드를 이용해 딕셔너리를 삭제할 수 있다.
  6. in 키워드를 사용하여 key 값의 존재 여부를 확인할 수 있다.

4. 딕셔너리 메서드

  1. get()
  2. keys()
  3. values()
  4. items()
  5. pop()
  6. pop()
  7. update()
  8. clear()
  9. zip

5. 딕셔너리 복사

  • 얕은 복사
# 1.shallow copy
a = {'a': 1, 'b': 2, 'c': 3}
b = a # 사전 레퍼런스의 복사 (공유됨)
print(a)
print(b)

a['a'] = 100
print(a)
print(b)
  • 깊은 복사
# 2.deep copy
c = {'a': 1, 'b': 2, 'c': 3}
d = c.copy()
print(c)
print(d)

c['a'] = 300
print(c)
print(d) # 변경되지 않음.
  • 복사 시 알아둘 것
# value에 list가 있다면 copy메소드를 사용해도 list는 얕은 복사되어 변수 간 공유된다.
a = {'a': [1,2,3], 'b':100}
b = a.copy()
print(a) #{'a': [1, 2, 3], 'b': 100}
print(b) #{'a': [1, 2, 3], 'b': 100}

a['b'] = 200
a['a'][0] = 999
print(a) #{'a': [999, 2, 3], 'b': 200}
print(b) #{'a': [999, 2, 3], 'b': 100}

# value에 dict가 있다면
a = {'user':{'name':'김동현','age':20},'amount':123}
b = a.copy();
print(a)
print(b)

a['user']['name'] = '김동팔'
print(a)
print(b)
  • 딕셔너리 병합
# update 메소드를 통한 두 dict의 병합
# 동일한 키값이 있다면, 인수로 주어진 dict의 아이템으로 덮어쓰기 된다.
dic1 = {'a':10, 'b':20}
dic2 = {'c':100, 'd':300}
dic1.update(dic2)

print(dic1) #{'a': 10, 'b': 20, 'c': 100, 'd': 300}
print(dic2) #{'c': 100, 'd': 300}
  • 딕셔너리 정렬
# dict의 정렬 : sorted
numbers = {'first': 1, 'second': 2, 'third': 3, 'Fourth': 4}
numbers['hundred'] = 100
numbers['fifth'] = 5

print(list(numbers)) #['first', 'second', 'third', 'Fourth', 'hundred', 'fifth']

# key값 정렬
print(sorted(numbers)) #['Fourth', 'fifth', 'first', 'hundred', 'second', 'third']

# value값 정렬
print(sorted(numbers.values())) #[1, 2, 3, 4, 5, 100]

# key정렬 (value값 정렬에 따라)
print(sorted(numbers, key=numbers.__getitem__)

'SKN > 01. python' 카테고리의 다른 글

03. 함수  (0) 2025.02.18
02. 제어문(조건문, 반복문)  (0) 2025.02.18
00. 파이썬 개요  (0) 2025.02.18
07. 예외처리(Exception)  (0) 2025.02.18
06. 파일 입출력(I/O)  (0) 2025.02.17