오늘도 점프투 파이썬 모르는 것만 얼른 훑고 넘어가자
1.
난 주로 format함수를 이용해 formatting을 하는 편이다.
formatting에 이런 방법이 있다는 걸 알았다.
print("안녕. 내 이름은 {name}이야. 나이는 {age}".format(name = "승니",age= 20))
풀어서 보면 이런거 아닐까?
name = "승니"
age = 20
print(f"안녕. 내 이름은 {name}이야. 나이는 {age}")
위에 건 f-string을 사용해 formatting을 한 것이다.
이건 파이썬 3.6버전부터 사용할 수 있다.
2. 문자열 내장 함수
- count
- find, index
없는 거 물어봤을 때 find는 에러 x(-1 출력), index는 에러 O.
차례대로 코드, 출력값.
a = "kky"
print(a.find("t"))
-1
a = "kky"
print(a.index("t"))
ValueError: substring not found
- join
문자열 사이사이에 무언가를 넣고 싶을 때 사용
'#' 뒤에는 출력값이다.
string = "".join('abcd')
print(string)
#abcd
string = " ".join('abcd')
print(string)
#a b c d
string = ",".join('abcd')
print(string)
#a,b,c,d
print("".join('abcd'))
이렇게도 가능하다.
- split
3.
split으로 나누면 리스트로 저장된다.
그리고 split()은 공백을 기준으로 나눈다는 뜻이다.
코딩 문제 풀 때 많이 사용되는데 잘 까먹는다;;
t = "123 456 789"
print(t.split())
출력값은 아래와 같다.
['123', '456', '789']
4.
비어있는 리스트는 a = list()로 생성할 수 있다.
5. n중 리스트에서 인덱싱하기
간단하게 2중 리스트에서 인덱싱하는 것을 보이겠다.
a = [1,2,3,["hi","hello","bonjour"]]
print(a[-1][0])
a라는 리스트에서 -1번째 요소는 list인 ["hi","hello","bonjour"]이다.
이 list의 0번째 요소는 "hi" 이다.
따라서 출력값은 아래와 같다.
hi
오늘 풀었던 코딩문제 모범답안에 이게 나왔는데 뭔지 몰라서 한참 헤맸다ㅜㅜ
6.
리스트도 슬라이싱이 가능하다.
a = [1,2,3]
print(a[0:2])
[1, 2]
7.
리스트는 연산이 가능하다.(더하기, 곱하기)
'#'뒤에는 출력값이다.
- 더하기
a = [1,2,3]
b = [4,5,6]
print(a+b)
#[1, 2, 3, 4, 5, 6]
이게 되는 거였다니... 과거의 나는 for문과 append를 써서 쌩쇼를 했던 것 같다..
- 곱하기
a = [1,2,3]
print(a*3)
#[1, 2, 3, 1, 2, 3, 1, 2, 3]
8.
리스트는 mutable(변하기 쉬운) 자료형이다.
'#'뒤에는 출력값이다.
- 바꾸기
a = ["가","나","다"]
a[2] = "라"
print(a)
#['가', '나', '라']
- 삭제하기
del 리스트[인덱스]
형태이다
a = ["가","나","다"]
del a[1]
print(a)
#['가', '다']
인덱스를 알아야 삭제할 수 있다.
인덱스는 index()로 찾으면 될듯.
슬라이싱 기법을 이용해 여러개를 한꺼번에 삭제할 수도 있다.
a = ["가","나","다"]
del a[1:]
print(a)
#['가']
9.
객체란 파이썬에서 사용되는 모든 자료형을 의미한다.
ex)문자열 자료형, 리스트 자료형, 튜플 자료형, 딕셔너리 자료형 등등
10.
리스트에서 sort함수는 리스트의 요소를 순서대로 정렬해준다.
숫자와 문자(한글,영어) 모두 가능.
a = ["가","다","나"]
a.sort()
print(a)
#['가', '나', '다']
a = ["a","c","b"]
a.sort()
print(a)
#['a', 'b', 'c']
a = [1,3,2]
a.sort()
print(a)
#[1, 2, 3]
11.
list에는 find() 함수가 없다.
인덱스를 찾으려면 index() 함수를 써야한다.
a = ["가","다","나"]
print(a.find("가"))
이렇게 하면 아래와 같은 오류가 뜬다.
AttributeError: 'list' object has no attribute 'find'
list에는 find라는 attribute(속성)이 없단다.
어떤 의미인지는 알겠는데 attribute가 뭔지 잘 감이 안온다.
그래서 찾아봤다.
근데 class와 연결지어 class attribute와 instance attribute 관련 설명이 나오는데
내가 클래스에 좀 약해서 이걸 이해하려면 시간이 좀 걸릴 듯하다.
뒤에 class장에서 더 배워보기로 하고 일단 attribute는 함수를 포함하는 개념정도로만 생각하고 넘어가자.
12.
문자열 자료형과 마찬가지로 리스트 자료형에서도 index()는 없는걸 물어보면 ValueError을 뱉어낸다.
a = ["가","다","나"]
print(a.index("라"))
ValueError: '라' is not in list
13.
리스트에서 insert(a,b)는 a번째 자리에 b를 삽입하는 함수다.
list= ["a","b","c","d"]
list.insert(0,"e")
print(list)
#['e', 'a', 'b', 'c', 'd']
14.
리스트에서 remove(x)는 리스트에서 첫번째로 나오는 x를 삭제하는 함수이다.
list= ["a","b","c","d","a"]
list.remove("a")
print(list)
#['b', 'c', 'd', 'a']
15.
리스트에서 pop()은 리스트의 맨 마지막 요소를 돌려주고 그 요소는 삭제한다.
list= ["a","b","c","d"]
print(list.pop())
print(list)
출력값은 아래와 같다.
d
['a', 'b', 'c']
16.
리스트에서 pop(x)는 리스트의 x번째 요소를 돌려주고 그 요소는 삭제한다.
list= ["a","b","c","d"]
print(list.pop(0))
print(list)
출력값은 아래와 같다.
a
['b', 'c', 'd']
17.
어떤 리스트 a에 임의로 정한 리스트 [1,2,3]을 더한다고 할 때,
a.extend([1,2,3])는 a+=[1,2,3] 과 동일하다.
a = [4,5,6]
a+=[1,2,3]
print(a)
#[4, 5, 6, 1, 2, 3]
a = [4,5,6]
a.extend([1,2,3])
print(a)
#[4, 5, 6, 1, 2, 3]
18.
~ does not support item assignment
라는 오류가 뜬다면 ~에 해당하는 자료형은 수정이 불가능하다.
item assignment가 수정을 의미하는가보다.
19.
immutable type인 문자열 자료형은 수정이 불가능하다.
replace()를 이용하면 수정이 가능해보이지만 변수에 저장된 값은 변하지 않는다.
S = 'hi hello'
print(S.replace('h','p'))
#pi pello
print문으로 만들었을 때에는 h가 p로 바뀌어 출력된다. 수정이 가능해보인다.
그러나
S = 'hi hello'
S.replace('h','p')
print(S)
#hi hello
replace 메소드를 사용했음에도 S라는 변수에 저장된 문자열은 여전히 "hi hello"이다.
안 바뀐 것이다.
20.
튜플에서 1개의 요소만을 가질 때에는 요소 뒤에 콤마(,)를 붙여야 한다.
tup = (1,)
튜플에서는 괄호를 생략해도 무방하다.
tup = 1,2,3
print(type(tup))
#<class 'tuple'>
21.
튜플과 리스트의 가장 큰 차이는 값을 변화시킬 수 있는가 여부이다.
튜플은 불가능하고 리스트는 가능하다.
프로그램이 실행되는 동안 그 값이 항상 변하지 않기를 바란다거나 값이 바뀔까 걱정하고 싶지 않다면 튜플을 사용해야 한다.
실제 프로그램에서는 값이 변경되는 형태의 변수가 훨씬 많기 때문에 평균적으로 튜플보다는 리스트를 더 많이 사용한다.
22.
튜플은 immutable type이기 때문에
요솟값 삭제, 변경 은 불가능
인덱싱,슬라이싱, 더하기, 곱하기, len() 은 가능
23.
딕셔너리는 대응관계를 나타낼 수 있는 자료형.
딕셔너리는 리스트나 튜프처럼 순차적(sequential)으로 해당 요솟값을 구하지 않고 key를 통해 value를 얻는다.
24.
딕셔너리에서 key는 고유한 값이므로 중복되는 key값을 설정해놓으면 하나를 제외한 나머지 것들이 모두 무시된다.
a = {1:'hi',1:'hello'}
print(a)
#{1: 'hello'}
25.
딕셔너리에서 key에는 immutable(불변의) 자료형만 사용할 수 있다.
따라서 key에 리스트는 쓸 수 없고, 튜플은 쓸 수 있다.
딕셔너리도 mutable type이므로 key로 사용할 수 없다.
value에는 어떤 자료형이 와도 상관없다.
26. 딕셔너리에서 key 리스트 만들기
I = {'name':'승니','age':20,'birth':2002}
print(I.keys())
dict_keys(['name', 'age', 'birth'])
딕셔너리.keys()는 딕셔너리의 key만을 모아서 dict_keys 객체를 돌려준다.
여기서 dict_keys 형태가 아닌 리스트로 돌려받고 싶다면 list를 씌워주면 된다.
I = {'name':'승니','age':20,'birth':2002}
print(list(I.keys()))
['name', 'age', 'birth']
**
파이썬 2.7 버전까지는 딕셔너리.keys() 함수를 호출할 때 반환값으로 리스트를 돌려줬다. 지금처럼 dict_keys가 아니라.
근데 리스트를 돌려주기 위해서는 메모리 낭비가 발생한다.
파이썬 3.0 이후 버전에서는 이러한 메모리 낭비를 줄이기 위해 dict_keys 객체를 돌려준다.
dict_values, dict_items 역시 같은 맥락으로 추가된 것들.
3.0 이후 버전에서 반환 값으로 리스트가 필요한 경우에 list(a.keys())를 사용하면 된다.
dict_keys, dict_values, dict_items 등은 리스트로 변환하지 않아도 기본적인 반복 구문(예: for문)을 실행할 수 있다.
I = {'name':'승니','age':20,'birth':2002}
for i in I.keys():
print(i)
name
age
birth
위와 같이 리스트를 사용하는 것과 차이가 없지만, 리스트 고유의 append,insert,pop,remove,sort 함수는 수행할 수 없다.
26.
items() 함수는 key와 value의 쌍을 tuple로 묶은 값을 dict_items 객체로 돌려준다.
I = {'name':'승니','age':20,'birth':2002}
print(I.items())
dict_items([('name', '승니'), ('age', 20), ('birth', 2002)])
dict_values 객체와 dict_items 객체도 dict_keys 객체처럼 리스트를 사용하는 것과 동일하게 사용할 수 있다.
27.
딕셔너리.clear() 함수는 딕셔너리 내의 모든 요소를 삭제한다.
I = {'name':'승니','age':20,'birth':2002}
I.clear()
print(I)
#{}
28. key로 value 얻기
딕셔너리.get(x) 함수는 x라는 key에 대응되는 value를 돌려준다.
I = {'name':'승니','age':20,'birth':2002}
print(I.get('name'))
#승니
딕셔너리.get(x) 는 딕셔너리[x]를 사용했을 때와 동일한 결괏값을 돌려받는다.
I = {'name':'승니','age':20,'birth':2002}
print(I['name'])
#승니
index와 find의 차이처럼
존재하지 않는 키를 가져오려고 할 경우,
a['nokey']는 key 오류를 발생시키고 a.get('nokey')는 None을 돌려준다.
여기서 None은 "거짓" 이라는 뜻이다.
I = {'name':'승니','age':20,'birth':2002}
print(I.get('height'))
None
I = {'name':'승니','age':20,'birth':2002}
print(I['height'])
KeyError: 'height'
29.
딕셔너리 안에 찾으려는 key가 없는 경우, 미리 정해진 디폴트값을 가져오게 할 수도 있다.
get(x, 디폴트값) 을 사용하면 된다.
x라는 key가 없으면 정해진 디폴트값을 돌려준다.
I = {'name':'승니','age':20,'birth':2002}
print(I.get('height','없슴다'))
#없슴다
30.
해당 key가 딕셔너리에 있는지 확인하려면 x in 딕셔너리 를 사용하면 된다.
x 라는 key가 딕셔너리 안에 있으면 True, 없으면 False를 돌려준다.
I = {'name':'승니','age':20,'birth':2002}
print('name' in I)
#True
I = {'name':'승니','age':20,'birth':2002}
print('height' in I)
#False
[교재]
'Python' 카테고리의 다른 글
211230 학습일기 (0) | 2021.12.31 |
---|---|
211224 학습일기 (0) | 2021.12.26 |
211223 학습일기 (0) | 2021.12.23 |
211222 학습일기 (0) | 2021.12.22 |
211216 학습일기 (0) | 2021.12.21 |