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. 셋의 특징
- 순서가 없는 자료형이며, 순서가 없으므로 인덱스를 사용한 접근이 불가능하다.
- 중복을 허용하지 않으므로 동일한 값은 하나만 저장된다.
- 가변성을 가진 자료형으로 데이터, 즉 요소를 추가하거나 제거할 수 있다.
- 다양한 데이터 타입을 지원한다.
- 수학적 집합 연산(합집합, 교집합, 차집합 등)을 지원한다.
- 키워드를 통해 포함 여부를 반환 받을 수 있다.
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. 딕셔너리 특징
- 키(key)와 값(value)의 쌍으로 구성된다.
- 키는 고유해야 하며 불변(immutable)한 데이터 타입이어야 한다.
- Dictionaries는 가변적인 자료구조이다.
- 빠른 조회와 수정이 가능하다.
- del 키워드를 이용해 딕셔너리를 삭제할 수 있다.
- in 키워드를 사용하여 key 값의 존재 여부를 확인할 수 있다.
4. 딕셔너리 메서드
- get()
- keys()
- values()
- items()
- pop()
- pop()
- update()
- clear()
- 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 |