메서드는 클래스 내부에 정의한 함수, 사실상 함수와 동일
쉽게 설명하자면, 객체의 기능
list.append('a') # <= .append()도 메서드
String.split('') # <= .split()도 메서드
String.replace(old, new[, count]) # 이것도 메서드 [optional] 괄호 안의 내용은 옵션
문자열(String Type)
모든 문자는 str타입(immutable ; 불변자료형)
word = 'hello'
print(id(word)) #2685397778032
word = 'world'
print(id(word)) #2685393262896
겉보기에는 변경 가능한 것처럼 보이지만, 파이썬은 변수에 메모리 주소만 저장하는 방식으로 구현되어 있음.
변수에 새로운 문자열을 넣으면, 문자열이 변경되는 것이 아닌 새로운 메모리 주소가 할당되는 것.
문자열 조회/ 탐색 및 검증 메서드
문법 | 설명 |
---|---|
s.find(x) | x의 첫 번째 위치를 반환. 없으면 -1을 반환 |
s.index(x) | x의 첫 번째 위치를 반환. 없으면 오류 발생 |
s.startswith(x) | 문자열이 x로 시작하면 True, 아니면 False 반환 |
s.endswith(x) | 문자열이 x로 끝나면 True, 아니면 False 반환 |
s.isalpha() | 알파벳 문자 여부 |
* 단순 알파벳이 아닌 유니코드 상 Letter(한국어 포함) | |
s.isspace() | 문자열의 공백 여부 판단 |
s.isupper() | 대문자 여부 판단 |
s.islower() | 소문자 여부 판단 |
s.istitle() | 타이틀 형식 여부 판단 |
print('apple'.find('p')) # 1
print('apple'.find('k')) # -1
print('apple'.index('k')) # ValueError: substring not found
print('abc'.isalpha()) # True
print('가나다'.isalpha()) # True
print('A'.isupper()) # True
print('a'.islower()) # True
print('Title'.istitle()) #True
문자열 관련 검증 메서드
문법 | 설명 |
---|---|
.isdecimal() | 문자열이 0~9까지의 수로 이루어져 있는가? |
.isdigit() | 문자열이 숫자로 이루어져 있는가? |
.isnumeric() | 문자열을 수로 볼 수 있는가? |
isdecimal() | isdigit() | isnumeric() | Example |
---|---|---|---|
True | True | True | "038", "੦੩੮", "038" |
False | True | True | "⁰³⁸", "🄀⒊⒏", "⓪③⑧" |
False | False | True | "↉⅛⅘", "ⅠⅢⅧ", "⑩⑬㊿", "壹貳參" |
False | False | False | "abc", "38.0", "-38" |
문자열 변경 메서드
문법 | 설명 |
---|---|
s.replace(old, new [, count]) | 바꿀 대상 글자를 새로운 글자로 바꿔서 반환 |
s.strip([chars]) | 공백이나 특정 문자를 제거(lstrip(), rstrip()으로도 구분) |
s.split(sep=None, maxsplit=-1) | 공백이나 특정 문자를 기준으로 분리 |
‘separator’.join([iterable]) | 구분자로 iterable을 합침 |
s.capitalize() | 가장 첫 번째 글자를 대문자로 변경 |
s.title() | 문자열 내 띄어쓰기를 기준으로 각 단어의 첫 글자는 대문자로, 나머지는 소문자로 변환 |
s.upper() | 모두 대문자로 변경 |
s.lower() | 모두 소문자로 변경 |
s.swapcase() | 대↔소문자 서로 변경 |
print('a,b,c'.split(',')) # ['a', 'b', 'c']
print('서울시 강남구 00동'.split()[0]) # 서울시
print('010-1234-5678'.split('-')) # ['010', '1234', '5678']
print('!'.join('coding')) # c!o!d!i!n!g
print(' '.join(['3', '5'])) # 3 5
print(''.join(['3', '4', '5'])) # 345 공백제거도 가능
msg = 'hello World! coiding is everywhere'
print(msg.capitalize()) # Hello world! coiding is everywhere
print(msg.title()) # Hello World! Coiding Is Everywhere
print(msg.upper()) # HELLO WORLD! COIDING IS EVERYWHERE
print(msg.lower()) # hello world! coiding is everywhere
print(msg.swapcase()) # HELLO wORLD! COIDING IS EVERYWHERE
문법 | 설명 |
---|---|
L.append(x) | 리스트 마지막에 항목 x를 추가 |
L.insert(i, x) | 리스트 인덱스 i에 항목 x를 삽입 |
L.remove(x) | 리스트 가장 왼쪽에 있는 항목(첫 번째) x를 제거 |
- 없는 경우, ValueError 발생 | |
L.pop() | 리스트 가장 오른쪽에 있는 항목(마지막)을 반환 후 제거 |
- 없는 경우, IndexError 발생 | |
L.pop(i) | 리스트의 인덱스 i에 있는 항목을 반환 후 제거 |
- 없는 경우, IndexError 발생 | |
L.clear() | 리스트의 모든 항목을 삭제 |
L.extend(m) | 순회형 m의 모든 항목들의 리스트 끝에 추가(+=와 같은 기능) |
L.index(x, start, end) | 리스트에 있는 항목 중 가장 왼쪽에 있는 항목 x의 인덱스를 반환 |
- 없는 경우 ValueError 발생 | |
L.reverse() | 리스트를 거꾸로 정렬 |
L.sort() | 리스트를 정렬(매개변수 이용가능) |
L.count(x) | 리스트에서 항목 x가 몇 개 존재하는지 갯수를 반환 |
cafe = ['starbuks', 'tomntoms']
cafe.append('banapresso')
print(cafe) # ['starbuks', 'tomntoms', 'banapresso']
cafe.insert(1, 'twosomeplace')
print(cafe) #['starbuks', 'twosomeplace', 'tomntoms', 'banapresso']
cafe.extend(['coffee'])
print(cafe) #['starbuks', 'twosomeplace', 'tomntoms', 'banapresso', 'coffee']
cafe.extend('cup')
print(cafe)
#['starbuks', 'twosomeplace', 'tomntoms', 'banapresso', 'coffee', 'c', 'u', 'p']
numbers=[1,2,3,'hi']
print(numbers) # [1, 2, 3, 'hi']
numbers.remove('hi')
print(numbers) # [1, 2, 3]
numbers.remove('hi') # ValueError: list.remove(x): x not in list
numbers=[1,2,3,'hi']
word=numbers.pop()
print(word) # hi
print(numbers) # [1, 2, 3]
numbers.clear()
print(numbers) # []
numbers=[1,2,3,4]
print(numbers.index(5)) # ValueError: 5 is not in list
numbers=[1,2,3,3,3,4,3,6]
print(numbers.count(3)) # 4
print(numbers.count(100)) # 0
.sort() 메소드는 기존의 리스트를 정렬된 상태로 변경
sorted() 함수는 이터러블 객체로부터 새로운 정렬된 객체를 생성
numbers = [2,3,5,7]
result = numbers.sort()
print(numbers, result) # [2, 3, 5, 7] None
numbers = [2,3,5,7]
# result = numbers.sorted() ------(x)
result = sorted(numbers) # [2, 3, 5, 7] [2, 3, 5, 7]
중복되는 요소가 없는, 순서에 상관없는 데이터들의 묶음
인덱스 접근 불가능
수학에서 집합을 표현한 자료형
집합 연산이 가능(여집합 연산자는 존재하지 않음)
담고있는 요소를 삽입 변경, 삭제 가능 → 가변 자료형(mutable)
문법 | 설명 |
---|---|
s.copy() | 세트의 얕은 복사본을 반환 |
s.add(x) | 항목 x가 세트 s에 없다면 추가 |
s.pop() | 세트 s에서 랜덤하게 항목을 반환하고, 해당 항목을 제거 (set이 비어있을 경우 KeyError 발생) |
s.remove(x) | 항목 x를 세트 s에서 삭제 (항목이 존재하지 않을 경우, KeyError 발생) |
s.discard(x) | 항목 x가 세트 s에 있는 경우, 항목 x를 세트 s에서 삭제 (없어도 오류 발생하지 않음) |
s.update(t) | 세트 t에 있는 모든 항목 중 세트 s에 없는 항목을 추가 |
s.clear() | 모든 항목을 제거 |
s.isdisjoint(t) | 세트 s가 세트 t의 서로 같은 항목을 하나도 갖고 있지 않은 경우, True 반환(서로소) |
s.issubset(t) | 세트 s가 세트 t의 하위 세트인 경우, True 반환 |
s.issuperset(t) | 세트 s가 세트 t의 상위 세트인 경우, True 반환 |
a = {'사과', '딸기'}
a.add('바나나')
print(a) # {'사과', '딸기', '바나나'}
b = {'사과', '딸기', '포도'}
a.update(b)
print(a) # {'딸기', '바나나', '사과', '포도'}
a.remove('딸기')
print(a) # {'바나나', '사과', '포도'}
# a.remove('딸기') # KeyError: '딸기'
a.discard('딸기') # discard는 항목이 존재하는 경우에만 삭제.
# 없어도 오류 발생하지 않음.
print(a) # {'바나나', '사과', '포도'}
a.clear()
print(a) # set()
a={'사과', '바나나', '수박'}
b={'포도', '망고'}
c={'사과', '포도', '망고', '수박', '바나나'}
print(a.isdisjoint(b)) # True a와 b는 겹치는 부분이 없음
print(a.isdisjoint(c)) # False a와 c는 겹치는 부분이 있음
print(b.issubset(c)) # True
print(a.issuperset(c)) # False a가 c의 상위셋인가?
키-값 쌍으로 이뤄진 자료형(3.7부터는 ordered, 이하 버전은 unordered)
문법 | 설명 |
---|---|
d.clear() | 모든 항목을 제거 |
d.copy() | 딕셔너리 d의 얕은 복사본을 반환 |
d.keys() | 딕셔너리 d의 모든 키를 담은 뷰를 반환 |
d.values() | 딕셔너리 d의 모든 값을 담은 뷰를 반환 |
d.items() | 딕셔너리 d의 모든 키-값의 쌍을 담은 뷰를 반환 |
d.get(k) | 키 k의 값을 반환하는데, 키 k가 딕셔너리 d에 없을 경우 None을 반환 |
d.get(k, v) | 키 k의 값을 반환 (키 k가 딕셔너리 d에 없을 경우 v를 반환) |
d.pop(k) | 키 k의 값을 반환하고 키 k인 항목을 딕셔너리d에서 삭제 (키 k가 딕셔너리 d에 없을 경우 KeyError 발생) |
d.pop(k, v) | 키 k의 갑을 반환하고 키 k인 항목을 딕셔너리 d에서 삭제하는데, 키 k가 딕셔너리에 없을 경우 v를 반환 |
d.update([other]) | 딕셔너리 d의 값을 매핑하여 업데이트 |