알고리즘/문법정리
[파이썬] 문자열 관련 빈출 함수
jungeun960
2021. 4. 7. 14:34
문자열 빈출 함수
- 문자 개수 세기 : 문자열.count('s')
- 특정 문자 찾기 : 문자열.find('s')
- 없으면 -1 리턴
- (접두어)특정 문자로 시작하는지 여부 : 문자열.startswith('ho') ( 참고자료 )
- (접미어)특정 문자로 끝나는지 여부 : 문자열.endswith('h')
- 문자열 대신 문자열로 이루어진 tuple을 넣을 수도 있다. (※리스트 안됨)
- 위치 알려주기2 : 문자열.index('s')
- 주의 : 없으면 오류 뜸
- 리스트를 문자열로 합치기 : '구분자'.join(리스트)
- 문자열 쪼개 리스트 만들기 : 문자열.split()
- 파라미터를 안쓰면 띄어쓰기, 엔터를 구분하여 나눈다
- 문자열 치환 : 문자열.replace('a','b') # a를 b로 바꾼다
a = 'hobby'
# 문자열에서 특정 문자의 개수를 리턴
s1 = a.count('b')
print(s1)
>>> 2
# 위치 찾기1
s2 = a.find('b')
print(s2)
>>> 2
s3 = a.find('k')
print(s3)
>>> -1
# 특정 문자로 시작하는지 여부
ss1 = a.startswith('ho')
print(ss1)
>>> True
# 특정 문자로 시작하는 여부 (여러개)
url = "https://www.naver.com"
url_check = ("http","https")
url.startswith(url)
>>> True
# 특정 문자로 끝나는지 여부
ss2 = a.endswith('h')
print(ss2)
>>> False
# 위치 찾기2
s4 = a.index('b')
print(s4)
>>> 2
a.index('k')
>>> 오류
# 리스트 문자로 합치기
b = ['a', 'b', 'c', 'd', '1', '2', '3']
s5 = "".join(b)
print(s5)
>>> abcd123
s6 = "-".join(b)
print(s6)
>>> a-b-c-d-1-2-3
# 문자열 쪼개기
c = "a b c d e f g"
s7 = s.split()
print(s7)
>>> ['a','b','c','d','e','f','g']
d = "aa.bb.cc.dd.ee.ff.gg"
s8 = s.split('.')
print(s8)
>>> ['aa','bb','cc','dd','ee','ff','gg']
+ 리스트 원소 추가, 삭제
- 원소 추가 : 리스트.append(값)
- 특정 위치에 원소 추가 : 리스트.insert(인덱스, 값)
- 여러 원소 추가하기 : 리스트.extend(추가할 리스트)
- 특정 위치의 원소 삭제 : del 리스트[인덱스]
- 원소 값 삭제 : 리스트.remove(값)
a = [1, 2, 3]
# 원소 추가
a.append(6)
>>> [1, 2, 3, 6]
# 특정 위치에 원소 추가
a.insert(1, 5)
>>> [1, 5, 2, 3, 6]
# 여러 원소 추가하기
a.extend([4,5,6])
>>> [1, 5, 2, 3, 6, 4, 5, 6]
# 특정 위치의 원소 삭제
del a[1]
>>> [1, 2, 3, 6, 4, 5, 6]
# 원소 값 삭제
a.remove(3)
>>> [1, 2, 6, 4, 5, 6]
문자열 정렬
- 리스트로 변환 후 sort, sorted를 사용하여 정렬한다.
- list 본체 정렬 : 문자열.sort() # reverse = True 시 내림차순 정렬
- list 정렬된 결과 반환 : sorted(문자열)
- list 뒤집기 : 문자열.reverse()
- 관련 문제 : 문자열 내림차순으로 배치하기 2021.04.07 - [알고리즘] - 20210407_코테공부
s = "Zbcdefg"
s = list(s)
print(s)
>>> ['Z', 'b', 'c', 'd', 'e', 'f', 'g']
s.sort(reverse = True)
print(s)
>>> ['g', 'f', 'e', 'd', 'c', 'b', 'Z']
a = [1, 10, 5, 7, 6]
a.sort()
a
>>> [1, 5, 6, 7, 10]
y = sorted(a)
y
>>> [1, 5, 6, 7, 10]
a.reverse()
a
>>> [6, 7, 5, 10, 1]
+ 문자열의 길이를 기준으로 정렬 : 문자열.sort(key=lamba x:len(x))
+ 문자열의 n번째 수 기준으로 정렬 : 문자열.sort(key=lambda x:x[n])
+ 다중 조건 정렬 : 문자열.sort(key=lambda x: (x[0],x[1])) // x[0] 기준으로 정렬하고 x[1] 기준으로 정렬
a = [(4,0), (4,3), (4,2), (3,2), (2,1), (1,0)]
# 인자 없이 sorted()를 사용하면 리스트 아이템의 각 요소 순서대로 정렬
# 첫 번째 요소가 같으면 두 번째 요소로 비교
b = sorted(a)
print(b)
>>> [(1, 0), (2, 1), (3, 2), (4, 0), (4, 2), (4, 3)]
# key인자에 lambda 함수를 넘겨주면 반환값을 가지고 비교해 정렬
# 이 때, key로 전달되지 않은 요소에 대해선 정렬하지 않음
c = sorted(a, key=lambda x : x[0])
print(c)
>>> [(1, 0), (2, 1), (3, 2), (4, 0), (4, 3), (4, 2)]
d = sorted(a, key=lambda x : x[1])
print(d)
>>> [(4, 0), (1, 0), (2, 1), (4, 2), (3, 2), (4, 3)]
# 정렬 기준으로 다중 조건을 넘겨줄 수도 있다
# 첫 번째 인자를 기준으로 오름차순 정렬을 먼저 한다.
# 그 결과를 가지고 두 번째 인자를 기준으로 내림차순 정렬(-를 붙이면 내림차순 정렬)
e = sorted(a, key = lambda x : (x[0], -x[1]))
print(e)
>>> [(1, 0), (2, 1), (3, 2), (4, 3), (4, 2), (4, 0)]
- 관련 문제 : 문자열 내 마음대로 정렬하기 2021.03.02 - [알고리즘] - 20210302_코테공부
대소문자 관리 함수 (upper, lower, isupper, islower)
- 주어진 문자열의 모든 알파벳을 소문자로 바꾸는 함수 : 문자열.lower()
- 주어진 문자열의 모든 알파벳을 대문자로 바꾸는 함수 : 문자열.upper()
- 주어진 문자열의 맨 첫 글자를 대문자로 바꾸는 함수 : 문자열.capitalize()
- 주어지 문자열에서 알파벳 외의 문자(숫자, 특수문자, 띄어쓰기 등)로 나누어져 있는 첫 글자를 모두 대문자로 바꾸는 함수 : 문자열.title()
- 소문자 확인 : 문자열.islower() -> True / False로 리턴
- 대문자 확인 : 문자열.isupper() -> True / False로 리턴
※ capitalize()와 title() 차이 주의!
+ 알파벳/숫자인지 확인하기 -> True / False로 리턴
- 알파벳인지 확인하기 : 문자열.isalpha()
- 숫자인지 확인하기 : 문자열.isdigit()
- 알파벳 또는 숫자인지 확인하기 : 문자열.isalnum() -> 특수문자 있는지 확인
- ※ 문자열에 공백이 포함되어 있으면 False를 리턴합니다
+ 소문자 / 대문자
- 'abcdefghijklmnopqrstuvwxyz'
- 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
a = 'hobby'
# 소문자로 바꾸기
s5 = a.lower()
print(s5)
>>> hobby
C = 'a2b3c4'
# 대문자로 바꾸기
C.upper()
>>> 'A2B3C4'
# 주어진 문자열의 맨 첫 글자를 대문자로 바꾸는 함수
C.capitalize()
>>> 'A2b3c4'
# 주어지 문자열에서 알파벳 외의 문자(숫자, 특수문자, 띄어쓰기 등)로
# 나누어져 있는 첫 글자를 모두 대문자로 바꾸는 함수 : 문자열.title()
C.title()
>>> 'A2B3B4'
# 소문자 확인
a.islower()
>>> True
# 대문자 확인
a.isupper()
>>> False
# 알파벳인지 확인하기
Ex1 = 'ABC'
print(Ex1.isalpha())
>>> True
Ex2 = "100Appia"
print(Ex2.isalpha())
>>> False
# 숫자인지 확인하기
Ex1 = '123456'
print(Ex1.isdigit())
>>> True
Ex2 = "R4R3"
print(Ex2.isdigit())
>>> False
# 알파벳 혹은 숫자인지 확인하기
Ex1 = 'Hello3'
print(Ex1.isalnum())
>>> True
Ex2 = "1.Where"
print(Ex2.isalnum())
>>> False
반응형