-
파이썬 문법(자료형, 입출력)카테고리 없음 2023. 2. 1. 23:49
▶실수형 표기
. 만 붙이면 저절로
a = 5.
b = .7
print하면 5.0 과 0.7로 출력 됨
▶ e또는 E를 이용한 지수표기
숫자e^지수 = 숫자*10^지수 (숫자 x 10의 N제곱)
예를 들어 1e9는 1*10^9 = 1,000,000,000(10억)
가령, 그래프 알고리즘 등에서 임의이 큰 수를 무한(INF)로 설정할 때, 가능한 최댓값이 10억 미만이라면 INF = 1e9 로 표기하는 등 이용한다.
이건 실수형 데이터이므로 정수형 데이터로 처리해야하는 상황(혹은 실수연산 오차 막고자 할때)이면 a = int(1e9) 이런식으로 형변환 해주면 된다.
▶ round()
파이썬은 IEEE754표준. 실수형 정보를 표현할 때 정확하지 않다.
0.3 + 0.6을 0.9로 가지지 못하고 0.89999999로 처리하는 것.
이를 해결하기 위해 round()사용. 특정 자릿수에서 반올림이 가능
123.456을 셋째 자리에서 반올림 => round(123.456, 2)로 작성.
셋째 자리에서 반올림 == 2째 자리까지 표시 => round(123.456, 2)
▶ 연산자
나누기 (/) 결과를 실수형으로 반환(즉, 정확하지 않을 가능성)
몫 연산자(//)
거듭제곱 연산자(**)
- List(table, array의 역할도 함)
array의 기능 + linked list와 유사한 기능 지원
append(), remove()가능
#배열 초기화 & 배열 전체 출력 a = [1,2,3,4,5] print(a) =>[1,2,3,4,5] #4번째 원소 출력(인덱싱) print(a[3]) =>4 # 크기가 N, 모든 값이 0인 1차원 리스트 초기화 n = 3 a = [0] * n =>[0,0,0]
▶ 인덱싱 Indexing(특정 원소 접근)
음의 정수로도 접근 가능(거꾸로 탐색)
a = [1,2,3,4,5,6,7,8,9] print(a[7]) =>8 print(a[-1]) =>9 print(a[-3]) =>7
▶슬라이싱 Slicing(연속적인 위치를 갖는 원소 접근)
대괄호 안에 콜론(:) 넣어서 시작인덱스, 끝 인덱스 설정
끝 인덱스는 실제 인덱스보다 1 더 크게 설정.
a = [1,2,3,4,5,6,7,8,9] #index 1부터 3까지 (2번째 원소~4번째 원소까지) print(a[1 : 4]) =>[2,3,4]
리스트에서 일부분을 추출 가능한 것.
▶ 리스트 컴프리헨션
대괄호 안에 조건문/반복문을 넣음으로써 리스트를 초기화 하는 방법
arr = [i for i in range(10)] print(arr) =>[0,1,2,3,4,5,6,7,8,9]
#0~19까지 홀수만 포함하는 리스트 arr = [i for i in range(20) if i % 2 == 1] print(arr) =>[1,3,5,7,9,11,13,15,17,19] #2부터 9 까지 수들의 제곱 값을 포함하는 리스트 arr = [i * i for i range(2,10)] print(arr) =>[4,9,16,25,36,49,64,81]
▶리스트 관련 메서드
append() 리스트에 원소 하나 삽입 O(1) sort() 오름차순 정렬. 내림차순은 sort(reverse=True) O(NlogN) reverse() 원소 순서를 모두 뒤집음 O(N) insert() 특정 위치에 원소 삽입 O(N) count() 특정 값을 가지는 데이터 개수 O(N) remove() 특정 값을 갖는 원소 제거.(여러개면 하나만 제거) O(N) ▶ 문자열 자료형
덧셈연산으로 이어붙이고, 곱셉연산으로 여러번 이어붙일 수 있다.
인덱싱과 슬라이싱이 가능하지만, 값을 변경할수는 없다.(가져올수만 있다)
▶ 튜플 자료형
리스트와 유사. 다만 튜플은 한 번 선언된 값 변경 불가.
소괄호() 사용, 리스트보다 공간 효율적. (값 변경 등 기능이 제한적이므로)
튜플이 유용한 경우 1. 서로 다른 성질의 데이터를 묶어 관리할 때(학번&등수 등 string과 int를 묶어야 한다면 ) 2. Hashing의 키 값으로 사용할 때(변경이 불가능하다는 특징에 따라) 3. 메모리를 더 효율적으로 사용해야 할 때 ▶ 사전 자료형
키&값 쌍을 데이터로 가짐.
리스트/튜플이 값을 순차적으로 저장하고 인덱스로 접근했던 것(순차적 저장)과 달리, 얘는 키 값으로 원소 접근.
파이썬에서 이 자료형은 내부적으로 Hash Table을 이용함. 따라서 데이터 조회&수정 시간복잡도가 O(1) => 리스트보다 훨씬 빠름
data = dict() data['키'] = '값' data['사과'] = 'apple' data['바나나']='banana' if '사과' in data: print('사과를 key로 가지는 value가 존재합니다.')
data = dict() data['키'] = 'value' data['사과'] = 'apple' data['바나나']='banana' print(data.keys()) print(data.values()) for i in data.keys(): print(data[i])
a = { '홍길동':24, '왕감자':12, '김철수':42 } print(a)
▶ 집합 자료형
중복 허용X, 순서X
리스트나 문자열을 이용해서 초기화 가능.(set()함수 사용)
data = set([1,1,2,3,3,3,4,5]) print(data) #중복 제거된 모습. => {1,2,3,4,5}
혹은 중괄호 사용해서 초기화
data = {1,1,2,3,4,5,5} print(data) =>{1,2,3,4,5}
합집합, 교집합, 차집합 연산 가능
#집합 2개 초기화 a = set([1,2,3,4,5]) b = set([3,4,5,6,7]) #합집합 print(a | b) => {1,2,3,4,5,6,7} #교집합 print(a & b) =>{3,4,5} #차집합 print(a - b) =>{1,2}
원소 추가할때는 add(값)
원소 여러개 추가할때는 update([값1, 값2, 값3])
원소 지울때는 remove(값)
리스트 튜플 사전 자료형 집합 인덱싱 가능 순서X, 인덱싱 불가. 시간복잡도 O(1) ▶ 기본 입출력
input() 한 줄의 문자열을 입력받음 map() 리스트의 모든 원소에 각각 특정한 함수를 적용 예) list(map(int, input().split()))
=> <input()을 공백 기준으로 split>한 것을 리스트로 생성. 리스트의 모든 원소에 int()로 형변환
예) a, b, c = map(int, input().split())
=> 데이터 적어서 굳이 리스트까지 안 만들어도 될 때
- 빠른 입력 방법
import sys 하여 sys.stdin.readline() 사용.
단, 입력 후 엔터가 줄 바꿈 기호로 입력되므로, rstrip()를 함께 사용해서 제거
import sys #문자열 입력 받기 data = sys.stdin.readline().rstrip() print(data)
▶ 표준 출력 방법
기본 출력은 print()이며 이는 출력 후 줄 바꿈 수행. 줄바꿈 원하지 않으면 end속성을 바꿔주면 됨.
각 변수는 콤마(,)를 이용해 띄어쓰기하여 출력 가능
a = 1 b = 2 print(a, b) # 콤마 이용해 a와 b를 띄워쓰기해 출력 => 1 2 print(7, end=" ") # end속성 이용해 줄바꿈이 아닌 " "를 넣도록 print(e, end=" ") answer = 7 print("정답은 " + str(answer) + "입니다.") # 문자열과 정수를 직접 더하기연산 안 되므로 정수answer을 str()함수 통해 문자열로 변환 => 7 8 정답은 7 입니다.
▶ f string
특정 문장을 더 간단하게 출력
문자열 앞에 접두사 f를 붙여 사용
ans = 7 print(f"정답은 {ans}입니다.") =>정답은 7입니다.
직전 예제처럼 굳이 정수를 문자열로 바꿔주고 할 필요가 없다.
출처
https://www.youtube.com/watch?v=m-9pAwq1o3w&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC