AIFFEL에서 공부한 Python data type에 대해 정리해보자
파이썬은 interpreter 언어?
역사
그전에 컴퓨터 언어의 역사를 보게 되면, 초창기에는 컴퓨터 언어를 assembly어로 구현했다. 그렇기에 컴퓨터 구조가 달라지면 (예를 들어, 신형 CPU 아키텍쳐의 변경 등) 기계어와 1대1로 매칭되기에, 프로그램을 실행하는데 CPU마다 구현되는 언어가 달라진다. 이걸 방지하기 위해 우리는 통일된 언어 체계를 개발했고 그것이 고급 언어이다. 그렇지만, 컴퓨터는 고급 언어를 이해하지 못 하기에 저급 언어로 해석해줄 필요가 있었고, 그래서 나온 것이 컴파일러이다.
Interpreter VS Compiler
둘 다 고급 언어와 저급 언어 간에 해석을 담당, 그러나 그 방식에서 차이를 보인다.
Compiler
Interpreter
123 # 숫자를 표현식으로
1 + 2 + 3 # 수식을 표현식으로
'Hello World!' # 문자열을 표현식으로
print('Hello World!')
a = 1 + 2 + 3
def add_9(x):
return x + 9
print(add_9(10))
규칙
- 예약어를 사용할 수 없다. ( list, class )
- 특수문자는 ' _ ' 만 사용이 가능하다. ( add? , test&return )
- 숫자로 시작할 수 없다. ( 9add , 10nd_test )
- 공백이 불가하다. ( test code , add 9 )
표기법
여러 단어로 구성된 식별자를 읽기 쉽게 하기위해 사용
+) 작성자는 현재 실습하는 코드에서 함수와 변수는 Snake를 class에서는 Pascal 사용
class : MyModel ( Pascal )
변수(variable) : correct_cnt , total_cnt ( Snake )
# 이것은 출력을 위한 코드입니다.
print('Hello World!')
기본 형태
print('Hello World!')
print('Hello \n world') # 줄바꿈 실행
print(1,2) # 두 값에 공백을 두고 출력
print(1,2, sep='/') # 구분자를 공백 대신 /로 둔다는 의미
print() # \n가 동일한 역할 가능, 오류가 터지지 않는다는 것을 알자
print(1) # 원래는 end라는 값이 default로 '\n'이 들어가 있어서 줄바꿔서 출력
print(2)
print()
print(1, end=' ') # end 값을 공백 2개로 지정해준다는 의미
print(2)
문자열 포맷팅
1. 기본 출력과 포멧 코드
a = 1 # 변수 할당
b,c = 2,3 # 변수 여러개 한번에 할당
d = b + c
print('a =',a) # 변수를 print에서 출력하는 방법
print('d =',d)
# 포맷 코드 사용 방식
x = 10
y = 'Python'
print('5 + 5 = %d' %x) # 포맷 코드를 사용해서 정수 출력
print('I love %s' %y) # 포맷 코드를 사용해서 문자열 출력
print('I learn %s %d days!' %(y,x)) # 여러 개에 포맷 코드를 사용하는 방법
2. format 함수 사용 방식
# 자료형을 지정해주지 않아서 좋음
x = 10
y = 'Python'
print('x is {0}'.format(x)) # index를 부여해서 순서대로 집어넣음
print('I learn {0} {1} days!'.format(y,x)) # y와 x 순서대로 대입
print()
# 인덱스가 아닌 변수명 자체로 대입 가능 / 대신 무조건 format 내부에서 할당 필수
print('x is {x}'.format(x=5))
print('I learn {y} {x} days!'.format(y='C++',x=5))
# print('x is {x}'.format(x)) / format 내부에서 할당이 없기 때문에 오류이다.
3. f 문자열 포멧 이용 (추천)
# 변수명만을 사용해서 대입 가능
x = 10
y= 'Python'
print(f'5 + 5 = {x}')
print(f'I love {y}')
# 정렬 또한 가능하다.
print(f'{x:>10}') # 10개의 빈 문자열에서 오른쪽 정렬
print(f'{x:<10}') # 10개의 빈 문자열에서 왼쪽 정렬
print(f'{x:^10}') # 10개의 빈 문자열에서 가운데 정렬
# 채우기도 가능
print(f'{y:0>10}') # 10개의 빈 문자열에서 오른쪽 정렬 후 나머지는 0으로 채움
1. 숫자형
정수형( int ) : 정수를 뜻하는 자료형
실수형( float ) : 소수점이 있는 자료형
2. 문자형
' , " , ''' , """ 총 4개에 표현식 ( str )
따옴표를 반대되는 것을 사용하면, 안에 반대 따옴표 사용 가능
print("Let's do Python!")
여러 줄을 한번에 출력하기 위해서는 ''', """을 사용해야함
\n , \\ , \t , \ 정도는 기억하자
a = 'I learn Python 30 days!, but I am good at Python.. ㅜㅜ'
print(len(a))
# 문자열에 첫 시작은 1이 아니라 0임
a = 'Hello World!'
print(a[2])
print(a[5]) # 공백 출력
문자열을 범위 단위로 반환
slicing = 'hello aiffel'
# 출력값: 'hello aiffel'
print('전체 출력', slicing[:]) # 모두 공백
# 뒤에 범위는 그 전까지만 포함
print('처음부터 5번째까지 출력 :', slicing[:6]) # 앞에 입력 X
print('6번째부터 마지막까지 출력 :', slicing[6:]) # 뒤에 입력 X
print('6번째부터 8번째까지 출력 :', slicing[6:9])
print('간격이 2로 모두 출력 : ', slicing[::2]) # 뒤에 하나의 argument 추가
collection : 여러 개의 element를 가지는 데이터 타입 ( list, tuple, set 등 )
+) sequence : 순서가 있는 데이터 타입 ( list, str, range, tuple 등 )
# 요소는 영어로 element라고 함
리스트명 = [요소1, 요소2, 요소3 ...]
리스트는 여러 자료형이 혼합해서 요소로 사용 가능하며, 리스트도 가능
list_test = [1,'2',[3,4],(5,6)]
비어있는 리스트 또한 생성 가능
list_empty = []
1. 문자열 더하기
2. 리스트 반복
3. 리스트 길이 구하기
4. 리스트 수정과 삭제
리스트 관련 함수
1. append
맨 마지막에 리스트 요소 추가
2. sort
요소의 크기에 맞게 정렬
문자열에 경우, 알파벳 순으로 정렬
3. reverse
요소들을 그대로 뒤집는다.
4. index
입력값의 index 반환
5. insert
리스트에 요소 삽입
# insert(a,b) : a 위치에 b 값을 삽입한다는 의미
a.insert(1,10)
6. remove
해당되는 첫번째 element 삭제
리스트에 맨 마지막 element를 반환하고 리스트에서 삭제
리스트에 포함된 element 개수 세기
# count(x) : x 인 element의 개수를 반환
a.count(1)
# 리스트와 다르게 소괄호로 감싼다.
튜플명 = (요소1, 요소2, 요소3 ...)
리스트와 다르게 생성하고 난 다음에 수정이 불가능하다.
튜플에 element가 하나만 들어가는 경우,
#이 형태로 생성해야 한다.
tuple_1 = (1,)
튜플의 값이 변경되지 않기 때문에, 연산 관련 부분도 값이 변경되지 않는 선에서 가능
# 순서가 없고 중괄호로 감싼다.
집합명 = { 값1, 값2, 값3 ... }
집합은 요소의 중복을 허용하지 않고, 순서가 존재하지 않는다.
순서가 없기 때문에, index로 접근할 수 없다. index 접근을 위해서는 list 등으로 변경
수학적으로 사용하는 교집합, 합집합, 차집합 등 구현가능
합집합 - 교집합
값을 맨 뒤 index에 추가
값을 여러 개 추가하기
처음 일치하는 값 제거하기
key와 value로 구성
# value는 list나 tuple도 가능
딕셔너리명 = { key1 : value1, key2 : value2, key3 : value3 }
# value에 접근하기 위해서는 무조건 key로 접근해야한다.
# 접근 형태
a[key1]
딕셔너리에 set 추가
딕셔너리에서 set 제거
key는 중복이 불가, value는 가능
key가 중복되는 경우 제일 뒤에 (최신식의) 있는 key만 인식
key list를 반환해주는 함수
value list를 반환해주는 함수
key와 value 쌍들을 튜플의 형태로 반환
key와 value들 모두 지우기
key로 value 값 얻기
dict['name']
과 동일한 역할을 하지만 존재하지 않는 key값 입력시,
해당 key가 딕셔너리 안에 있는지 조사 후, bool로 출력
True와 False
bool을 표현하는 다른 방식
- False : 문자열, 튜플, 리스트, 딕셔너리, 집합 비어 있는 경우, 0, None
- True : 그 외에 모든 값