dev_eun
[Python] 기본 문법 정리 본문
동빈나님 영상(이코테 2021 강의 몰아보기) 참고
1. 자료형
정수형
- 변수에 정수 대입하면 자동으로 정수형
실수형
-
소수점을 붙인 수를 대입하면 자동으로 실수형 변수
-
소수부가 0이거나 정수부가 0인 소수는 0 생략 가능
# 둘다 실수형 a = .7 b
-
나누기 연산(/)을 하였을 경우 실수형으로 반환
-
지수 표현 방식
-
e, E 다음에 오는 수는 10의 지수부를 의미
a = 5e10 # 5의 10제곱 b = 5e0.5 # 5의 제곱근
-
-
round()
함수 이용하여 반올림
수 자료형의 연산
연산 내용 | 연산자 |
---|---|
곱하기 | * |
나누기 | / |
나머지 | % |
몫 | // |
거듭 제곱 | ** |
리스트
-
여러 개의 데이터를 연속적으로 담아 처리
-
C++의 vector와 유사
-
비어 있는 리스트 초기화는 [], list()
-
원소를 넣어 초기화는 [1, 5, 6]
-
인덱스 접근 가능
-
인덱스에 음수 정수를 넣으면 뒤에서부터 인덱싱 가능
a = [1, 2, 3, 4, 5] print(a[-3]) # 뒤에서 3번째 원소 출력 # 결과 : 3
-
연속적인 값 가져오기
-
콜론(:)을 이용
-
list[시작인덱스 : 끝인덱스 + 1]
a = [1, 2, 3, 4, 5] print(a[1:3] # [2, 3]
-
-
extended slices
arr[A:B:C]
- index A부터 index B까지 C 간격으로 배열을 만들어라
- A == None ? 처음부터
- B == Nond ? 할 수 있는 데까지, C > 0 이면 마지막까지, C < 0 이면 처음까지
- C == Nond ? 한 칸 간격으로
컴프리헨션
-
리스트를 초기화하는 방법 중에 하나
-
대괄호 안에 조건문과 반복문을 적용하여 리스트 초기화 가능
array = [i for i in range(10) if i % 2 == 1] print(array) # [1, 3, 5, 7, 9]
-
2차원 리스트 초기화할 때 효과적으로 사용
array = [[0] * m for _ in range(n)] # 이렇게 하면 원소가 m개인 리스트 객체가 n개 생기는 거임 # 의도하지 않은 이상 이렇게 하면 안댐 array = [[0] * m] * n
-
언더바(_)는 반복을 수행하되 반복을 위한 변수가 필요 없을 때 사용
리스트 관련 기타 메소드
함수명 | 사용법 | 설명 | 시간 복잡도 |
---|---|---|---|
append() |
리스트.append() | 리스트에 뒤에 원소 삽입 | O(1) |
sort() |
리스트.sort() | 오름차순 정렬하고 저장, reverse = True 내림차순 정렬 | O(NlogN) |
reverse() |
리스트.rever() | 리스트 원소 뒤집음 | O(N) |
insert() |
리스트.insert(삽입할 위치 인덱스, 삽입할 값) | 특정 위치에 원소 삽입 | O(N) |
count() |
리스트.count(특정값) | 특정값을 가지는 데이터 개수 반환 | O(N) |
remove() |
리스트.remove(특정값) | 제일 앞쪽에 있는 특정값 하나만 제거 | O(N) |
-
특정한 값을 가진 원소 모두 제거하기
a = [1, 2, 3, 4, 5] remove_set = {3, 5} result = [i for i in a if i not in remove_set] print(result) # [1, 2, 4]
문자열
-
큰 따옴표(")나 작은 따옴표(')을 이용하여 문자열 초기화
-
큰 따옴표 안에 작음 따옴표 포함 가능, vice versa
-
백슬래시()로도 포함 가능
-
문자열 끼리 덧셈(+) 연산 가능
-
문자열과 수 자료형은 덧셈 불가능
-
f
사용answer = 7 print(f"정답은 {answer}입니다.") # 정답은 7입니다.
-
-
문자열을 양의 정수와 곱하는 경우, 문자열이 그만큼 더해짐
-
인덱싱, 슬라이싱 가능
-
값은 변경 불가능!!
튜플
- 한 번 선언된 값 변경할 수 없음
- 소괄호(())을 이용하여 선언
- 인덱싱과 슬라이싱 가능(순차적 저장)
- 서로 다른 성질 데이터를 묶어서 관리할 때 유용
- 해싱의 키값으로 사용 가능
- 리스트보다 메모리 효율 좋음
사전
-
key와 value를 쌍으로 같은 데이터 자료형
-
순서가 없음
-
immutable한 자료형을 key로 사용 가능
-
해시 테이블을 이용하여 데이터 조회 및 수정이 O(1)임
-
dict()
을 이용하여 초기화 가능, 혹은 대괄호 안에 콤마로 구분해서도 가능data = dict() data['사과'] = 'apple' data['바나나'] = 'banana' data2 = { '사과' : 'apple', '바나나' : 'banana' } print(data) print(data2) # data와 data2 같은 결과 # {'사과': 'apple', '바나나': 'banana'}
-
keys()
: 키 데이터만 뽑아서dict_keys
형태로 반환,list()
로 묶어 리스트로 활용 -
values()
: 값 데이터만 뽑아서dict_values
형태로 반환,list()
로 묶어 리스트로 활용
집합
-
중복을 허용하지 않음
-
순서가 없음
-
set()
을 이용하여 초기화, 혹은 대괄호 안에 각 원소를 콤마로 구분하여 초기화# 같은 코드 data = set([1, 2, 3, 4, 5, 5, 5, 5]) data = {1, 2, 3, 4, 5, 5, 5, 5} print(data) # {1, 2, 3, 4, 5}
-
데이터 조회 및 수정에 있어서 O(1)
집합 자료형 관련 함수
함수명 | 사용법 | 설명 |
---|---|---|
add() |
집합.add(값) | 값을 추가 |
update() |
집합.update(리스트) | 원소 여러 개 추가 |
remove() |
집합.remove(값) | 특정 값 제거 |
집합 자료형 연산
형태 | 연산자 |
---|---|
합집합 | A U B |
교집합 | A ∩ B |
차집합 | A - B |
2. 기본 입출력
input()
- 한 줄의 문자열 입력
빠르게 입력 받기
import sys
# 문자열 입력 받기
data = sys.stdin.readline().rstrip()
print(data)
print()
- 콤마를 이용하여 띄어 쓰기로 구분하여 출력 가능
- 출력 이후 디폴트 문자는 줄바꿈
end
속성으로 변경 가능
map()
-
리스트의 모든 원소에 각각 특정 함수를 적용
-
예시
-
공백을 기준으로 구분되는 되는 데이터 입력
data = list(map(int, input().split())) # 입력 몇 개 없으면 a, b, c = map(int, input().split())
-
3. 조건문
x = 15
if x >= 10:
# code
elif x >= 20:
# code
else
# code
비교연산자
비교연산자 |
---|
== |
!= |
> |
< |
>= |
<= |
논리연산자
논리연산자 |
---|
and |
or |
not |
기타 연산자
- 리스트, 튜플, 문자열, 딕셔너리 모두 사용 가능
연산자 |
---|
in |
not in |
pass 키워드
- 아무 것도 하고 싶지 않을 때 사용
- if문 안에 비워 놓으면 에러가 발생하기 때문에 사용하면 유용
간소화
-
실행 코드가 한 줄일 경우
score = 85 if score >= 80: result = "Success" else: result = "Failed"
-
조건부 표현식
score = 85 result = "Success" if score >= 80 else "Failed"
4. 반복문
-
continue
키워드 사용 가능 -
break
키워드 사용 가능 -
while
i = 1 result = 0 while i>=9: result += i i += 1
-
for
array = [1, 2, 3, 4, 5] for i in array: print(i)
range
- range(시작 값, 끝 값 + 1)
- range(값 + 1), 0부터 값까지
5. 함수
-
정의
def 함수명(매개변수): 실행 코드 return 반환 값
-
반환 값이 여러 개일 경우 콤마로 구분해서 반환 가능
global
키워드
- 함수안에서 키워드를 사용하지 않으면 참조만 가능, 직접적인 값 변경 불가능
- 하지만 직접적이지 않고 내부 함수를 이용하는 경우 이건 또 가능
a = 0
# 불가능
# def func():
# a = 6
# 가능
def func():
global a
a = 6
print(a) # 6
array = [1, 2, 4]
def func2():
array.append(6)
func2()
print(array) # [1, 2, 4, 6]
람다 함수
-
형식
lambda 매개변수: 리턴값
array = [('홍길동', 50), ('이순신', 32), ('아무개', 74)]
print(sorted(array, key=lambda x: x[1]))
list1 = [1, 2, 3, 4, 5]
list2 = [6, 7, 8, 9, 10]
result = map(lambda a, b: a + b, list1, list2)
6. 자주 사용되는 라이브러리
내장 함수
함수명 | 설명 |
---|---|
sum() |
합을 반환 |
min() |
최소값 반환 |
max() |
최대값 반환 |
eval() |
문자열로 이루어진 수 연산을 실행 |
sorted() |
오름차순으로 반환, reverse=True 로 내림차순 정렬, key 값으로 정렬 가능 |
순열과 조합: itertools
-
순열
from itertools import permutations permutations(n, r)
-
조합
from itertools import combinations combinations(n, r)
-
중복 순열
from itertools import product product(n, r)
-
중복 조합
from itertools import combinations_with_replacement combinations_with_replacement(n, r)
collections
-
Counter
from collections import Counter cnt = Counter([1, 1, 2, 2, 3, 3, 3]) print(dict(cnt)) # {1: 2, 2: 2, 3: 3}
math
-
최대 공약수
import math print(math.gcd(21, 14)) # 7
-
번외 : 최소 공배수
import math def ldm(a, b): return a * b // math.gcd(a, b) a = 21 b = 14 print(lcm(a, b)) # 42
-
'기타' 카테고리의 다른 글
[Kafka] max.request.size configuration 오류 (2) | 2021.02.02 |
---|---|
[Python] 그리디 알고리즘 (0) | 2020.12.10 |
[Linux | Ubuntu] 서버 웹 포트 열기(Apache2) (0) | 2019.12.09 |