예지의 개발 로그포스 (Yeji's Log Force)

파이썬 문법(자료형, 입출력) 본문

카테고리 없음

파이썬 문법(자료형, 입출력)

Yeji Heo 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

Comments