1장은 기본적인 설치와 에디터 등의 내용이기 때문에 2장부터 내용 정리를 한다.
2-1 숫자형
<정수형>
정수를 뜻하는 자료형
a = 10
<실수형>
소수점이 포함된 숫자
a = 0.2
a = 1.2E10
a = 1.2e-10
지수 표현을 할 때 e와 E를 모두 사용할 수 있다.
<8진수와 16진수>
8진수는 0o, 0O로 시작
16진수는 0x로 시작
a = 0o77
print(a) //63
b = 0xABC
print(b) //2748
<연산자>
1. 사칙연산
+, -, *, /
2. x의 y제곱
x**y로 쓴다.
a = 3
b = 4
print(a**b) //81
3. %, //
%는 나눈 나머지, //는 나눈 몫을 반환한다.
2-2 문자열 자료형
<문자열을 만드는 방법>
1. 큰따옴표로 둘러싸기 & 큰따옴표 3개로 둘러싸기
"Hard Study"
"""Hard Study"""
2. 작은 따옴표로 둘러싸기 & 작은 따옴표 3개로 둘러싸기
'Hard Study'
'''Hard Study'''
<문자열 안에 큰따옴표, 작은 따옴표 포함>
"Ha'rd' Study"
'Ha"rd" Study'
큰 따옴표로 감싸면 작은 따옴표는 문자열로 인식된다.
반대로 작은 따옴표로 감싸면 큰따옴표는 문자열로 인식된다.
"Ha\'rd\' St\"ud\"y"
역슬래시를 '와 " 앞에 붙여서 문자열로 인식시키는 방법도 있다.
<여러줄 문자열을 변수에 담는 방법>
1. \n 삽입
"Hard\nStudy"
2. 연속된 작은 따옴표, 큰따옴표 3개 사용
'''Hard
... study'''
"""Hard
... study"""
<문자열 연산>
1. 문자열 더하기
a = "Hard"
b = "Study"
print(a+b) // "HardStudy"
2. 문자열 곱하기
a = "Hard"
print(a*2) //"HardHard"
*로 곱한 횟수만큼 문자열이 반복돼서 나온다.
<문자열 인덱싱, 슬라이싱>
*문자열 길이 구하기
a = "Hard"
print(len(a)) //4
문자열 인덱싱
a = "Hard"
a[0]: "H", a[1]: "a", a[2]: "r", a[3]: "d"
a[-1]: "d"
문자열의 첫 글자는 0번째부터 시작한다.
-1번째는 뒤에서부터 첫번째 문자를 가리킨다.
문자열 슬라이싱
a = "Hard"
a[0:3]= "Har"
a[0:4]= "Hard"
a[1:2]= "a"
a[:2]= "Ha"
a[2:]= "rd"
x:y로 슬라이싱을 하면 x<= <y 번째에 있는 문자를 가져온다.
즉, y번째는 포함하지 않는다.
0:3으로 슬라이싱을 하면 a[0], a[1], a[2]를 가져온다.
[:2]는 처음부터 2번째까지 슬라이싱한 것을 뜻하고
[2:]는 2번째부터 끝까지 슬라이싱한 것을 뜻한다.
<문자열 포매팅>
문자열 안의 특정한 값을 바꿔야 하는 경우에 사용한다.
1. 숫자 대입
print("Hard Study %d days." % 3)
// Hard Study 3 days.
숫자가 들어가야 할 자리에 %d를 쓰고 문자열 뒤에 % 숫자를 쓰면 된다.
2. 문자열 대입
print("Hard Study %s days." % "three")
// Hard Study three days.
숫자 대입과 거의 같은데 %d 대신에 %s를 사용한다.
3. 숫자 값을 나타내는 변수 대입
num = 3
print("Hard Study %d days." % num)
// Hard Study 3 days.
숫자 대입과 방식은 같다.
4. 2개 이상의 값 넣기
print("Hard Study %d days and %d weeks." %(7, 1))
// Hard Study 7 days and 1 weeks.
괄호 안의 쉼표로 값을 구분하여 각각 넣어주면 된다.
%s 문자열
%c 문자 1개
%d 정수
%f 부동소수
%o 8진수
%x 16진수
%% 문자 % 자체
다양한 자료형의 문자열 포맷 코드 종류이다.
<유용한 포맷 코드>
1. 정렬과 공백
print("%10s" % "Hard")
//" Hard"
%10s는 전체 길이가 10인 문자열 공간에서 오른쪽으로 문자열을 정렬하고
그 앞은 공백으로 채우라는 의미이다.
즉, 6칸의 공백과 Hard 4글자가 출력된다.
왼쪽 정렬은 %-10s 로 사용할 수 있다.
2. 소수점 표현
print("%0.4f" % 3.141592)
// 3.1415
%0.4f는 소수점 4번째 자리까지만 나타내는 것을 의미한다.
%0.4f 대신에 %.4f로 사용하기도 한다.
<format 함수>
1. 숫자 대입
print("Hard Study {0} days.".foramt(3))
// "Hard Study 3 days."
{0}부분을 .format함수를 이용하면 숫자로 바꿀 수 있다.
2. 문자열 대입
print("Hard Study {0} days.".foramt("three"))
// "Hard Study three days."
숫자와 같은 방식으로 대입할 수 있다.
3. 숫자 값을 나타내는 변수 대입
num = 3
print("Hard Study {0} days.".foramt(num))
// "Hard Study 3 days."
4. 2개 이상의 값 넣기
num = 3
week = "one"
print("Hard Study {0} days and {1} week.".foramt(num, week))
// "Hard Study 3 days and one week."
{0}, {1}로 format함수안의 인자의 인덱스를 {}안에 넣어주면
해당 인덱스의 입력값이 순서에 맞게 들어간다.
print("Hard Study {num} days and {week} week.".foramt(num=3, week="one"))
// "Hard Study 3 days and one week."
인덱스로 하지 않고 변수 이름으로 할 수도 있다.
<f문자열 포매팅>
파이썬 3.6버전부터 지원되는 기능이다.
num = 3
print(f'Hard Study {num} days.')
// 'Hard Study 3 days.'
변숫값을 생성한뒤, 뒤에 format함수를 붙이는 대신에 앞에 f를 붙이면
값을 알아서 참조한다.
<문자열 관련 함수들>
1. count
a = "Haaard"
print(a.count('a'))
// 3
문자열 안의 특정 문자가 몇개 들어가 있는지 개수를 세어준다.
2. find
a = "Hard"
print(a.find('r'))
// 2
문자열 안에서 특정 문자의 위치를 검색해서 처음 나오는 인덱스를 반환한다.
존재하지 않는 경우에는 -1을 반환한다.
3. join
print(",".join("Hard"))
// "H,a,r,d"
문자 사이에 ,를 삽입한다.
4. upper, lower
a = 'hard'
b = 'HARD'
print(a.upper()) // 'HARD'
print(a.lower()) // 'hard'
upper는 문자를 대문자로, lower는 소문자로 바꿔준다.
5. lstrip, rstrip, strip
a = " Hard "
print(a.lstrip()) // "Hard "
print(a.rstrip()) // " Hard"
print(a.strip()) // "Hard"
lstrip은 왼쪽 공백을, rstrip은 오른쪽 공백을 지운다.
strip은 양쪽 공백을 지운다.
6. replace
a = "Hard Study"
print(a.replace("Study", "Hack"))
// 'Hard Hack'
replace는 (바뀔 문자열, 바꿀 문자열) 이렇게 입력값을 받고
문자열 안의 특정 값을 다른 값으로 바꿔준다.
7. split
a = "Hard Study"
print(a.split())
// ['Hard', 'Study']
b = "a:b:c:d"
print(b.split(':'))
// ['a', 'b', 'c', 'd']
split 함수 안에 아무것도 넣지 않으면, 공백(space, tab, enter)를 기준으로 문자열을 나눈다.
split함수의 입력값으로 특정 문자를 주면, 해당 문자를 구분자로 문자열을 나눠준다.
나눈 값을 리스트에 넣어서 반환한다.
2-3 리스트 자료형
<리스트의 생성>
a = [1,2,3,4]
대괄호로 감싸고 각 요소를 쉼표로 구분해서 생성하면 된다.
<리스트의 인덱싱과 슬라이싱>
a = [1,2,[3,4]]
a[0] // 1
a[2][1] // 4
인덱싱은 문자열과 거의 같다.
0번째부터 시작하고, 리스트 안에 리스트가 있는 경우에는 []를 2개 써서 원하는 위치를 가져올 수 있다.
a = [1,2,3,4]
a[0:2] // [1,2]
슬라이싱도 문자열과 같은 원리이다.
<리스트 값 수정 및 삭제>
a = [1,2,3]
a[0] = 4
a // [4,2,3]
del a[1:]
a // [4]
수정은 그냥 원하는 인덱스를 정의하면 되고
삭제는 del함수를 이용해서 할 수 있다.
<리스트 관련 함수>
1. append
a = [1,2,3]
a.append(4)
a // [1,2,3,4]
append(x)는 리스트의 마지막에 x 값을 추가해준다.
2. sort
a = [1,2,3,2,1]
a.sort()
a // [1,1,2,2,3]
sort함수는 리스트를 정렬해준다.
문자열도 알파벳 순으로 정렬해준다.
3. reverse
a = [1,2,3]
a.reverse()
a // [3,2,1]
reverse함수는 리스트를 거꾸로 뒤집는다.
4. index
a = [1,2,3]
a.index(2)
1
index(x)는 리스트 안에서 x가 몇번째에 있는지 찾아준다.
5. insert
a = [1,2,3]
a.insert(1, 4)
a // [1,4,2,3]
insert(x, y)는 x번째에 y값을 삽입한다.
6. remove
a = [1,2,3]
a.remove(1)
a // [2,3]
remove(x)는 리스트 안에서 x를 제거한다.
7. pop
a = [1,2,3]
a.pop()
a // [1,2]
pop(x)는 리스트에서 x번째 값을 제거한다.
그냥 pop()으로 쓰면 마지막 원소를 제거한다.
8. count
a = [1,2,3]
a.count(3)
1
count(x)는 리스트 안에 x가 몇개 있는지 세어주는 함수이다.
9. extend
a = [1,2,3]
a.extend([4,5])
a // [1,2,3,4,5]
extend는 리스트를 더하는 함수이다.
a.extend(x)는 a+=x와 동일한 의미이다.
2-4 튜플 자료형
<튜플 생성>
t1 = ()
t2 = (1,)
t3 = (1,2,3)
t4 = 1,2,3
튜플은 리스트와 거의 같지만 []대신 ()를 사용하고,
소괄호를 생략해서 쓸수도 있다.
그리고 요소가 1개만 있을 때는 , 를 붙여야 한다.
튜플과 리스트의 차이는 요소값의 변경 가능성이다.
리스트는 안에 있는 값을 마음대로 바꿀수 있지만 튜플은 바꿀 수 없다.
튜플의 인덱싱, 슬라이싱이나 연산 등은 리스트와 모두 동일하기 때문에 넘어가겠다.
2-5 딕셔너리 자료형
<딕셔너리>
딕셔너리는 key와 value가 쌍으로 이루어진 데이터의 집합이다.
dic = {'key1': 'value1', 'key2': 'value2'}
딕셔너리의 기본적인 형태는 key:value가 쉼표로 구분되어 나열되어 있는 형태이다.
<딕셔너리 쌍 추가>
a = {1: 'a'}
a[2] = 'b'
{1:'a', 2:'b'}
쌍 추가는 리스트와 비슷한데, 인덱스를 넣는 것이 아니라 키를 넣어주면 된다.
<딕셔너리 요소 삭제>
a = {1:'a', 2:'b'}
del a[1]
{2:'b'}
요소 삭제는 del함수를 이용해 할 수 있다.
**딕셔너리에는 key가 중복으로 들어갈 수 없다.
그리고 key로 리스트는 쓸 수 없지만 튜플은 쓸 수 없다. key가 변하면 안된다는 특성 때문이다.
<딕셔너리 관련 함수>
a = {'key': 'value', 'aaa': 'bbb'}
a.keys()
dict_keys(['key', 'aaa'])
a.keys()는 딕셔너리 a의 key들을 모아 객체를 리턴한다.
리스트 형태로 리턴받고 싶으면 list(a.keys())로 쓰면 된다.
a.values()
dict_values(['value', 'bbb'])
a.values는 딕셔너리 a의 value값들을 모아 객체를 리턴한다.
a.items()
dict_items([('key', 'value'), ('aaa', 'bbb')])
items 함수는 key, value쌍을 튜플로 만든 값을 객체로 리턴한다.
a.clear()
{}
clear 함수는 딕셔너리의 모든 요소를 삭제한다.
a.get('key')
value
get 함수는 key에 대응되는 value값을 반환한다.
a['key']와 동일한 결과이지만, 딕셔너리에 존재하지 않는 키를 입력했을 때
a['key']는 에러가 나지만 get 함수는 None을 리턴한다는 차이점이 있다.
'key' in a
True
'key1' in a
False
in 함수는 딕셔너리 안에 해당 key가 있는지 조사하고 True, False로 리턴한다.
2-6 집합 자료형
<집합 자료형 생성>
s = set([1,2,3])
s2 = set("Hello")
s2 //{'e', 'H', 'l', 'o'}
집합 자료형은 set으로 생성한다.
문자열을 입력해서 만들 수도 있다.
집합 자료형은 순서가 없고, 중복을 허용하지 않기 때문에 Hello로 만든 set이 저런 결과를 낸다.
<교집합 구하기>
s1 = set([1,2,3,4,5,6])
s2 = set([4,5,6,7,8,9])
s1 & s2
{4,5,6}
s1.intersection(s2)
{4,5,6}
&연산자를 이용하거나 intersection 함수를 사용하면 된다.
<합집합 구하기>
s1 | s2
{1,2,3,4,5,6,7,8,9}
s1.union(s2)
{1,2,3,4,5,6,7,8,9}
| 연산자를 이용하거나 union 함수를 사용하면 된다.
<차집합 구하기>
s1 - s2
{1,2,3}
s2-s1
{8,9,7}
s1.difference(s2)
{1,2,3}
s2.difference(s1)
{8,9,7}
- 연산자를 이용하거나 difference 함수를 사용하면 된다.
<집합 자료형 관련 함수>
1. add
s1 = set([1,2,3])
s1.add(4)
s1 {1,2,3,4}
add함수를 이용해 set에 1개의 값을 추가할 수 있다.
2. update
s1 = set([1,2,3])
s1.update([4,5,6])
s1 {1,2,3,4,5,6})
update 함수를 이용하면 한번에 여러 개의 값을 추가할 수 있다.
3. remove
s1 = set([1,2,3])
s1.remove(2)
s1 {1,3}
remove 함수를 이용해 특정 값을 제거할 수 있다.
2-7 불 자료형
bool 자료형은 참(True), 거짓(False)를 나타내는 자료형이다.
문자열, 리스트, 튜플, 딕셔너리 등의 자료형에서 값이 비어있으면 거짓이 되고,
비어있지 않으면 참이 된다.
2-8 자료형의 값을 저장하는 공간, 변수
변수_이름 = 변수에_저장할_값
파이썬은 변수에 저장된 값을 알아서 판단하고 자료형의 타입을 지정해주기 때문에 편리하다.
<리스트 복사>
a = [1,2,3]
b = a
id(a) == id(b)
True
b = a를 통해 변수를 대입해 같은 리스트를 만들 수 있다.
이렇게 하면 변수의 주소인 id도 같게 된다.
a[0] = 4
b[0] //4
하지만 이렇게 하면, a의 값을 바꿔도 b의 값이 같이 바뀌어 버린다는 문제점이 생긴다.
이 문제점을 해결할 수 있는 2가지 방법이 있다.
1. [:] 이용
b = a[:]
이렇게 하면 a[:]는 변수 a 그 자체가 아니라 리스트의 값 전체를 가리키기 때문에 값만 복사할 수 있다.
2. copy 이용
from copy import copy
a = [1,2,3]
b = copy(a)
copy 모듈을 불러와서 copy함수를 사용하면 리스트 값을 복사할 수 있다.
'웹개발' 카테고리의 다른 글
점프 투 파이썬 4장 - 파이썬의 입출력 (0) | 2023.10.19 |
---|---|
점프 투 파이썬 3장 - 제어문 (0) | 2023.10.19 |
MySQL-Sequelize (0) | 2023.10.15 |
Node.js (0) | 2023.10.11 |
JavaScript (0) | 2023.10.11 |