본문 바로가기

Python

211221 학습일기

오늘도 점프투 파이썬 모르는 것만 얼른 훑고 넘어가자

 

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

 

 

 

[교재]

https://wikidocs.net/book/1

 

점프 투 파이썬

** 점프 투 파이썬 오프라인 책(개정판) 출간 !! (2019.06) ** * [책 구입 안내](https://wikidocs.net/4321) 이 책은 파이썬 ...

wikidocs.net

 

'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