데이터 분석/python
python 문법
fullfish
2025. 9. 24. 16:07
name = input("이름: ")
age = input("나이: ")
print("입력된 이름은",name,'이고 나이는',age,'입니다.')
print(f"입력된 이름은 {name}이고 나이는 {age}입니다.")
price = int(input("단가: "))
count = int(input("수량: "))
print(f"1입력된 단가는 {price}이고 수량은 {count}이며 가격은 {price*count}입니다.")
print("2입력된 단가는 ",price,"이고 수량은 ",count,"이며 가격은 ",price*count,"입니다.")
c=float(input('변환하고 싶은 섭씨온도를 입력하세요.'))
print(f"섭씨온도: {c}")
print(f"화씨온도: {c*1.8+32}")
a = int(input("국어: "))
b = int(input("영어: "))
c = int(input("수학: "))
sum = a + b + c
print(f"총점: {sum}")
print(f"평균: {sum / 3}")
print(f"평균: {sum / 3:.2f}") # 소수점 둘째 자리까지
리스트(list/arr)
colors = ["red", "blue", "green"]
print(colors)
print(colors[1])
print(len(colors))
print(colors[0:2])
list1 + list2 # 리스트 2개 붙임
list * 3 # 3번 반복
cities = ["서울", "광주", "부산", "동해", "전주"]
print(cities[::-2]) # ["전주", "부산", "서울"]
append() # 뒤에 추가
pop() # 뒤에 삭제
pop(0) # 앞에 삭제
extend() # 리스트 합치기 +와 같음
insert(n, "a") # n 인덱스에 "a" 끼워 넣기
remove() # 특정 값 1개 지움
del arr[1:3] # 범위 삭제
from collections import deque # 더 빠름
dq = deque([1, 2, 3])
dq.append(4) # push
dq.pop() # pop
dq.appendleft(0) # unshift
dq.popleft() # shift
t = [1, 2, 3] # 1, 2, 3을 변수 t에 패킹
a , b , c = t # t에 있는 값 1, 2, 3을 변수 a, b, c에 언패킹
print(t, a, b, c) # [1, 2, 3] 1 2 3
# enumerate 인덱스 함께
for index, v in enumerate(['tic', 'tac', 'toe']):
# zip
a, b, c = zip((1, 2, 3), (10, 20, 30), (100, 200, 300))
print(a, b, c) # (1, 10, 100) (2, 20, 200) (3, 30, 300)
[sum(x) for x in zip((1, 2, 3), (10, 20, 30), (100, 200, 300))] # [111, 222, 333]
a = 300
b = 300
a is b False
a == b True
a = 1
b = 1
a is b True
a == b True
# 왜냐하면 -5 부터 256까지의 정수는 인터프리터가 구동될때 특정 메모리 주소에 저장해두고 그 주소값을 쓰기 떄문에
print((1 <= 100 < 10)) # False
print(((1 <= 100) < 10)) # True
논리
js는
&&, ||, !
쓰지만
python은
and, or, not으로 씀
print(4 and 2) # 2 (둘 다 True니까 마지막 값 반환)
print(4 & 2) # 0 (100 & 010 → 000 → 0)
python에서 &, |는 비트연산자임
반복
for i in range(1, 10, 2) # 1부터 9까지 2씩 증가
for i in range(10, 1, -1) # 10부터 2까지 1씩 감소
# 인덱스
fruits = ["apple", "banana", "cherry"]
for idx, f in enumerate(fruits):
print(idx, f)
# 객체
user = {"name": "만선", "age": 31}
for key, value in user.items():
print(key, value)
# 여러 리스트
names = ["철수", "영희", "민수"]
scores = [90, 85, 77]
for n, s in zip(names, scores):
print(n, ":", s)
# 인덱스 함께
fruits = ["apple", "banana", "cherry"]
for index, value in enumerate(fruits):
print(index, value)
for index, value in enumerate(fruits, start=1):
print(index, value)
list(enumerate(fruits)) # [(0, 'apple'), (1, 'banana'), (2, 'cherry')]
# map
nums = [1, 2, 3, 4]
squares = list(map(lambda x: x**2, nums))
print(squares) # [1, 4, 9, 16]
nums = [1, 2, 3, 4]
squares = [x**2 for x in nums]
print(squares) # [1, 4, 9, 16]
# filter
nums = [1, 2, 3, 4]
evens = list(filter(lambda x: x % 2 == 0, nums))
print(evens) # [2, 4]
nums = [1, 2, 3, 4]
evens = [x for x in nums if x % 2 == 0]
print(evens) # [2, 4]
# reduce
from functools import reduce
sum_val = reduce(lambda acc, cur: acc + cur, arr, 0)
조건
# 파이썬에서 삼항연산자
A if 조건 else B # js는 조건? a : b
정렬
arr.sort(reverse=True) # 내림차순
arr.sort(key=len) # 문자열 길이 기준 정렬
sorted(arr, reverse=True) # 원본 안건드림
sorted(["apple", "banana", "kiwi"], key=len)
# 예를 들어 2번째 요소 기준 정렬
data = [[1, 20300104, 100, 80],
[2, 20300804, 847, 37],
[3, 20300401, 10, 8]]
data.sort(key=lambda x: x[1])
sorted_data = sorted(data, key=lambda x: x[1])
함수
# 기본적으로 js는 전역 변수취급 파이썬은 global 써 줘야함
# js에서 내부 함수에 let해주면 지역 변수 취급 파이썬은 그냥 쓰면 지역 변수 취금
키워드 인수 # 이건 js에서는 없음
def print_something(my_name, your_name):
print("Hello {0}, My name is {1}".format(your_name, my_name))
print_something("Sungchul", "TEAMLAB")
print_something(your_name = "TEAMLAB", my_name = "Sungchul")
# Hello TEAMLAB, My name is Sungchul
# Hello TEAMLAB, My name is Sungchul
디폴트 인수
def print_something_2(my_name, your_name = "TEAMLAB"):
print("Hello {0}, My name is {1}".format(your_name, my_name))
print_something_2("Sungchul", "manseon")
print_something_2("Sungchul")
# Hello manseon, My name is Sungchul
# Hello TEAMLAB, My name is Sungchul
가변인수
def asterisk_test(a, b, *args): # js에서는 ...
return a + b + sum(args)
print(asterisk_test(1, 2, 3, 4, 5))
키워드 가변 인수
def kwargs_test(**kwargs):
print(kwargs)
print("First value is {first}".format(**kwargs))
print("Second value is {second}".format(**kwargs))
print("Third value is {third}".format(**kwargs))
kwargs_test(first = 3, second = 4, third = 5)
# {'first': 3, 'second': 4, 'third': 5}
# First value is 3
# Second value is 4
# Third value is 5
def kwargs_test(one, two, *args, **kwargs):
print(one + two + sum(args))
print(kwargs)
kwargs_test(3, 4, 5, 6, 7, 8, 9, first = 3, second = 4, third = 5)
# 42
# {'first': 3, 'second': 4, 'third': 5}
-----------------
def f(**args):
print(args)
print(args.keys())
print(list(args.keys()))
print(args.values())
print(args.items())
print(args.get("name"),False)
print(arges['name']
f(name="man", age=25)
문자열
import sys # sys 모듈을 호출
print(sys.getsizeof("a"), sys.getsizeof("ab"), sys.getsizeof("abc"))
50 51 52

# js에서
'123'.padStart(5, '0'); // "00123"
'123'.padEnd(5, '*'); // "123**"
# python에서
'123'.rjust(5, '0') # '00123'
'123'.ljust(5, '*') # '123**'
'123'.zfill(5) # '00123'
f'{"123":0>5}' # '00123' (왼쪽에 0 채움)
f'{"123":*<5}' # '123**' (오른쪽에 * 채움)
print("Product: {0}, Price per unit: {1:.2f}".format("Apple", 5.243))
Product: Apple, Price per unit: 5.24
# 패딩
print("%10d" % 12)
12
print("%10.3f" % 5.94343) # 10자리를 확보하고 소수점 셋째 자리까지 출력
5.943
자료구조
set

dic
dic = dict(aa=100, bb=200)
print(dic)
dic.update(cc=300, dd=400)
print(dic)
dic.update({"ee": 500, "ff": 600})
print(dic)
{'aa': 100, 'bb': 200}
{'aa': 100, 'bb': 200, 'cc': 300, 'dd': 400}
{'aa': 100, 'bb': 200, 'cc': 300, 'dd': 400, 'ee': 500, 'ff': 600}
del dic['aa']
dic.pop['bb'] # 이건 리턴 있음
dic.popitem() # 마지막에 넣은 키:값을 튜플형태로
# 3가지 많이 쓰는 모듈
from collections import OrderedDict
from collections import defaultdict
from collections import Counter
# OrderedDict 모듈 선언
from collections import OrderedDict
d = dict()
d["x"] = 100
d["y"] = 200
d["z"] = 300
d["l"] = 500
# changed = OrderedDict(sorted(d.items(), key=sort_by_key)).items()
changed = OrderedDict(sorted(d.items(), key=lambda t: t[0])).items()
print(changed)
move_to_end(키) # 맨 뒤로
move_to_end(키,last=False) # 맨 앞으로
# defaultdict 모듈 선언
from collections import defaultdict
d = defaultdict(lambda: 0) # Default 값을 0으로 설정 / 그냥 int해도 됨 빈 배열 넣으려면 list
print(d["first"]) # 0
# Counter 모듈 선언
from collections import Counter
text = list("gallahad")
c = Counter(text)
print(c) # Counter({'a': 3, 'l': 2, 'g': 1, 'h': 1, 'd': 1})
print(list(c)) # ['g', 'a', 'l', 'h', 'd']
print(list(c.elements())) # ['g', 'a', 'a', 'a', 'l', 'l', 'h', 'd']
+ 합집합은 요소 더함
& 교집합은 작은 값
| or은 큰 값
- 는 차집합
c = Counter(a=4, b=2, c=0, d=-2)
d = Counter(a=1, b=2, c=3, d=4)
c.subtract(d)
print(c) # Counter({'a': 3, 'b': 0, 'c': -3, 'd': -6})
print(c - d) # Counter({'a': 2})
시간 측정
# 성능(시간) 테스트
import time
start = time.perf_counter()
end = time.perf_counter()
end - start
컴프리헨션
#리스트
print([i + 10 for i in range(10)]) # [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
필터
evens = list(filter(lambda x: x % 2 == 0, nums))
evens = [x for x in nums if x % 2 == 0]
# 속도 더 빠름
import time
iteration_max = 10000
vector = list(range(iteration_max))
scalar = 2
start = time.perf_counter()
for _ in range(iteration_max):
result = []
for value in vector:
result.append(scalar * value)
end = time.perf_counter()
print("for문 사용 경과 시간: ", end - start) # 약 4초
start = time.perf_counter()
for _ in range(iteration_max):
[scalar * value for value in range(iteration_max)]
end = time.perf_counter()
print("Comprehenstion문 사용 경과 시간: ", end - start) # 약 3초
# 위에껀 append를 따로 하지만 아래껀 원소 생성 및 추가를 c 레벨에서 동시에 함
클래스
# 기본 형태
class 클래스이름 (obj)
# 매직 매서드(Magic Method)
이름 앞뒤에 __(언더스코어 두 개)가 붙은 매서드, 던더 메서드(dunder method, double underscore)라고도 함
# 생성 소멸
class Person:
def __init__(self, name): # 객체 생성 시 자동 호출
self.name = name
def __del__(self): # 객체 소멸 시 자동 호출
print(f"{self.name} is deleted")
# 문자열 표현
class Person:
def __init__(self, name):
self.name = name
def __str__(self): # print()나 str()에서 사용
return f"Person({self.name})"
def __repr__(self): # 디버깅/REPL 표현
return f"Person(name={self.name!r})"
# 연산자 오버로딩
class Vector:
def __init__(self, x, y):
self.x, self.y = x, y
def __add__(self, other): # + 연산자 동작 정의
return Vector(self.x + other.x, self.y + other.y)
v1 = Vector(1, 2)
v2 = Vector(3, 4)
print(v1 + v2) # Vector(4, 6)
# 컨테이너 관련
class MyList:
def __init__(self, data):
self.data = data
def __len__(self): # len() 동작 정의
return len(self.data)
def __getitem__(self, index): # [] 연산자 정의
return self.data[index]
ml = MyList([1,2,3])
print(len(ml)) # 3
print(ml[0]) # 1
# 자주 쓰는 매직 매서드
__init__ : 생성자
__del__ : 소멸자
__str__, __repr__ : 문자열 변환
__len__ : len() 호출 시
__getitem__, __setitem__, __delitem__ : 인덱싱 연산
__iter__, __next__ : 반복자
__eq__, __lt__, __gt__ 등 : 비교 연산자
__add__, __sub__, __mul__ 등 : 산술 연산자
# 예시
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __del__(self): # 객체 소멸 시 자동 호출
print(f"{self.name} is deleted")
def __str__(self): # print()나 str()에서 사용
return f"Person({self.name})"
def change_name(self, name):
self.name = name
def change_age(self, age):
self.age = age
def show_data(self):
print(f"이름: {self.name}")
print(f"나이: {self.age}")
p1 = Person("manseon", 32)
p1.gender = "F"
print(p1.name)
print(p1)
print(p1.gender)
p1.show_data()
p1.change_name("kim")
p1.show_data()
manseon
Person(manseon)
F
이름: manseon
나이: 32
이름: kim
나이: 32
kim is deleted
__name__ 변수
파이썬은 파일을 실행할 때, 특별한 전역 변수 __name__을 자동으로 만들어 줘.
두 가지 경우로 값이 달라져:
직접 실행한 경우 (예: python myfile.py) → __name__ == "__main__"
다른 파일에서 import한 경우 (예: import myfile) → __name__ == "myfile"
# 상속
class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age
class Korean(Person):
pass # 별도의 내용 없이 클래스만 존재한다는 뜻
first_korean = Korean("Sungchul", 35)
print(first_korean.name)
class Person(object): # 부모 클래스 Person 선언
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
def about_me(self): # 메서드 선언
print("저의 이름은", self.name, "이고요, 제 나이는", str(self.age), "살입니다.")
class Employee(Person): # 부모 클래스 Person으로부터 상속
def __init__(self, name, age, gender, salary, hire_date):
super().__init__(name, age, gender) # 부모 객체 사용
self.salary = salary
self.hire_date = hire_date # 속성값 추가
def do_work(self): # 새로운 메서드 추가
print("열심히 일을 한다.")
def about_me(self): # 부모 클래스 함수 재정의
super().about_me() # 부모 클래스 함수 사용
print(
"제 급여는", self.salary, "원이고, 제 입사일은", self.hire_date, "입니다."
)
p1 = Person(name="manseon", age="32", gender="M")
p1.about_me()
print("----")
p2 = Employee(name="manseon", age="32", gender="M", salary=100, hire_date="2025")
p2.about_me()
저의 이름은 manseon 이고요, 제 나이는 32 살입니다.
----
저의 이름은 manseon 이고요, 제 나이는 32 살입니다.
제 급여는 100 원이고, 제 입사일은 2025 입니다.
