Skip to content

Latest commit

 

History

History
288 lines (199 loc) · 9.08 KB

220714_Python.md

File metadata and controls

288 lines (199 loc) · 9.08 KB

💻메서드(methods)

type.method() 방식으로 사용한다.

쉽게 이해하기 위해서 noun.verb() 로 생각하자!


메서드와 함수의 차이가 무엇일까?

# 메서드를 활용하면, 그 리스트가 정렬된 상태로 변경된다(원본이 변경됨)
a = [10, 1, 100]
new_a = a.sort()
a.sort()
print(a)
# a = [10,1,100]
# new_a = None

# sorted 함수를 활용하면, 원본을 변경하지 않는다(return 된 것은 정렬된 리스트이다)
b = [10, 1, 100]
new_b = sorted(b)
print(b, new_b)
# b = [10,1,100]
# new_b = [1,10,100]

즉, 원본을 변경하냐 안하느냐의 차이이다.


💻문자열(String Type) 탐색/검증

  • s.find(x): 문자열에서 첫 번째 x의 위치를 반환해준다. 없으면 -1을 반환한다!
'apple'.find('p') # 1
'apple'.find('k') # -1

  • s.index(x): x의 첫 번째 위치를 반환한다. 없으면 오류가 발생한다.

  • s.isalpha(): 해당 문자열이 알파벳으로 이루어져있는지 확인한다.

  • s.isupper(): 문자열이 대문자로 이루어져있는지 확인한다.

  • s.islower(): 문자열이 소문자로 이루어져있는지 확인한다.

  • s.capitalize(): 영문법에 맞게 첫 글자를 대문자로 변환한다.

  • s.istitle(): 첫글자가 대문자로 시작하는지 확인한다. capitalize를 했다면 True일 것이다.

  • s.isdecimal(): 해당 문자열이 숫자인지 판단하는 메서드이다. ⛔타입이 문자열일 때만 사용가능하다.


'abcdefg'.index(c) # 2
'abc'.isalpha() # True
'Ab'.isupper() # False
'ab'.islower() # True
'hello world!'.capitalize() # Hello world!
'Title Title!'.istitle() # True
'123412'.isdecimal() # True

💻문자열(String Type) 변경

  • s.replace(old, new ,count): 바꿀 대상 글자를 새로운 글자로 반환한다. count를 지정하면 해당 개수만큼 시행가능하다.
'coone'.replace(o, a) # caane
'cooone'.replace(o, !, 2) # c!!one

  • s.strip(chars): 특정한 문자(chars)를 지정하면 그 문자를 해당 문자열에서 제거한다
    • lstrip(): 인자로 전달된 문자를 왼쪽에서 제거한다.
    • rstrip(): 인자로 전달된 문자를 오른쪽에서 제거한다.
    • strip(): 인자로 전달된 문자를 왼쪽과 오른쪽에서 제거한다.
    • 문자열을 지정하지 않으면 공백을 제거한다.
'     wow!       '.strip() # wow!
'wow!'.strip('w') # ow!
'     wow!'.lstrip() # wow!
'wow!     '.rstrip() # wow!

  • s.split(sep = None, maxsplit = -1): 문자열을 특정한 단위로 나눠 리스트로 변환
    • sep이 None이거나 지정되지 않으면 연속된 공백문자를 단일한 공백문자로 간주하고, 선행/후행 공백은 빈 문자열에 포함시키지 않음.
    • sep가 문자열을 분리시키는 분기점이 된다고 생각하면 편하다.
    • maxsplit = 1인 경우에는 한 번 나누는 것을 허용한다 라고 생각하면 편하다.
    • maxsplit = -1인 경우에는 제한이 없다.
str = 'Hello world!'
print(str.split()) # ['Hello', 'world!']
print(str.split('o')) # ['Hell', ' w', 'rld!']
print(str.split('o', 0)) # ['Hello world!'] # 나누는 것을 허용하지 않았다.

  • 'seperator'.join([iterable]): 반복가능한 컨테이너 요소들을 합쳐서 문자열로 반환한다.
    • 쉽게 말해서 split()의 반대 개념이라고 생각하면 된다.
    • 만약에 iterable에 문자열이 아닌 값이 있으면 TypeError가 발생한다.
    • seperator로 합친 문자열을 나눈다.
''.join(['3', '5']) # 35
', '.join(['3', '5']) # 3, 5

numbers = ' '.join([10,20,100])
print(numbers) # TypeError발생한다. iterable에 요소들이 int이기 때문이다.

# 위의 문제를 해결하기 위해서는 int를 str로 바꿔야한다. 어떻게 하면 좋을까?
numbers = map(str, [10,20,100])
numbers = ' '.join(numbers)
print(numbers)

💻리스트(List)에서의 값 추가 및 삭제

: 변경 가능(mutable)한 값들의 나열된 자료형

  • L.append(x): 리스트에 값을 그대로 추가한다.

  • L.extend: 리스트에 iterable의 모든 원소를 추가한다.

  • L.insert(i, x): 정해진 위치 i에 x값을 추가한다.

  • L.remove(x): 리스트에서 가장 왼쪽에 있는 값이 x인 것 한 개를 삭제한다. 존재하지 않을 경우 ValueError가 발생한다.

test = [1,2,3,4,5]

# append
test.append(6) # [1,2,3,4,5,6]
test.append([6,7,8]) # [1,2,3,4,5,[6,7,8]]

# extend
test.extend([6,7,8]) #[1,2,3,4,5,6,7,8]

# insert
test.insert(1, 'no_1') # [1,no_1,2,3,4,5]
test.insert(0, 'no_0') # [no_0,1,2,3,4,5]

⛔ Append vs Extend (차이가 무엇일까?)

append(): 입력 값 그대로를 하나의 원소로 리스트에 추가한다.

extend(): iterable 한 입력 값 내의 원소를 각각 리스트에 추가한다.

test = [1,2,3]

test.append([4,5,6]) # [1, 2, 3, [4, 5, 6]] 입력값이 하나의 원소로써 리스트에 추가되었다.
test.extend([4,5,6]) # [1, 2, 3, 4, 5, 6] 입력값의 개별적인 원소들이 리스트에 각자 추가되었다.

test.append([[4,5,6],[7,8,9],[10,11,12]]) # [1, 2, 3, [[4, 5, 6], [7, 8, 9], [10, 11, 12]]
test.extend([[4,5,6],[7,8,9],[10,11,12]]) # [1, 2, 3, [4, 5, 6], [7, 8, 9], [10, 11, 12]]

결국에 가장 내부에 있는 iterable을 리스트에 추가하는 것이 extend() 이고,

입력한 매개변수를 그대로 리스트에 추가하는 것이 append() 이다.


  • L.pop(): 리스트 가장 오른쪽에 있는 항목(마지막)을 반환하고 제거한다.
  • L.pop(i): 리스트의 인덱스 i에 있는 항목을 반환하고 제거한다.
  • L.clear(): List 내의 모든 항목을 삭제한다.
  • L.sort(): 원본 리스트를 정렬하고 None을 반환한다.
numbers = [3,2,5,1]

numbers.sort() # [1,2,3,5]
numbers.pop() # [3,2,5]
numbers.pop(2) # [3,2,1]
numbers.clear() # []

  • L.count(x): 리스트 내의 모든 x값의 갯수를 반환한다.

  • L.index(x): 왼쪽 기준으로 첫 번째 x값을 찾아서 해당 index값을 반환한다.

  • L.reverse(): 리스트의 순서를 반대로 뒤집는다. 내림차순으로 정렬하는 것이 아니다! None 반환한다.

numbers = [1, 5, 7, 5, 2, 5, 7]

numbers.count(5) # 3
numbers.index(7) # 2
numbers.reverse() # [7,5,2,5,7,5,1]

💻딕셔너리

: 키-값 쌍으로 이루어진 collection

  • .get(key, default): key를 통해 value를 가져온다.
    • Key가 존재하지 않아도 KeyError가 발생하지 않으며 (None 출력), default 값(기본값)을 설정할 수 있다.
test = {'A':1, 'B':2, 'C':3}

test.get('A') # 1
test.get('D') # None
test.get('D', 'Does not exist') # Does not exist
test.get('D', 0) # 0

  • .pop(key, default): key가 딕셔너리에 있으면 해당 키를 제거한다.
    • Key가 없으면 default값을 반환한다. default 값이 없으면 KeyError가 발생한다.
test = {'A':1, 'B':2, 'C':3}

test.pop() # KeyError
test.pop('A') # A를 제거 {'B':2,'C':3}
test.pop('D', 'Does not exist') # Does not exist

  • .update(key = value): 기존 딕셔너리 내의 값을 제공하는 key, value로 덮어쓴다.
    • 한 값보단 여러개의 값을 한꺼번에 업데이트 할 때 사용된다.
    • key가 존재하지 않는 경우에는 새로운 key-value가 정의된다.
test = {'A':1, 'B':2, 'C':3}

test.update({'A': 9999, 'B': 10000}) # {'A': 9999, 'B': 10000, 'C': 3}

# 한 개의 key만 업데이트 시에는 아래의 방법을 쓸 수 있다.
test['A'] = 0 # {'A': 0, 'B': 2, 'C': 3}

  • .keys(): 딕셔너리 내의 모든 key 값을 출력한다.
  • .values(): 딕셔너리 내의 모든 value 값을 출력한다.
  • .items(): 딕셔너리 내의 모든 key-value 값을 출력한다.
test = {'A':1, 'B':2, 'C':3}

test.keys() # dict_keys(['A', 'B', 'C']) <class 'dict_keys'>
test.values() # dict_values([1, 2, 3]) <class 'dict_values'>
test.items() # dict_items([('A', 1), ('B', 2), ('C', 3)]) <class 'dict_items'>
⛔keys(), values(), items() 메서드를 사용하여 반환시 특이하게도 모두 고유의 타입을 지닌다. 이름만 다를 뿐 리스트와 동일한 성질을 지니고 있다.

🌟딕셔너리에서의 반복(iteration)
fruit_dict  = {'apple': '사과', 'banana': '바나나'}

for i in fruit_dict:
    print(i, fruit_dict[i]) # apple 사과 \n banana 바나나
    
# key와 value를 한줄에 반환하고 싶을 때는 items 메서드를 사용하자.
for k, v in fruit_dict.items():
    print(k, v) # apple 사과 \n banana 바나나

⛔딕셔너리끼리는 더하기를 할 수 없다.

메서드의 경우 원본을 변경하여 반환하기 때문에 변수에 할당할 필요가 없지만, 함수의 경우 원본을 변경하지 않기 때문에 변수에 할당 해야 한다. 메서드마다 다르다.

⛔해당 대상이 mutable인지 immutable인지에 잘 체크하자.