알고리즘/문법정리

[파이썬] 문자열 관련 빈출 함수

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_코테공부
 

20210407_코테공부

프로그래머스 - 깊이/너비 우선 탐색(DFS/BFS) # 타겟 넘버 (Level 2) Point. 타겟 넘버가 그래프 문제인 이유 -> 다음 인덱스에 해당하는 numbers 원소를 더하거나 빼 값을 방문한다. 방문한(pop)한 원소 temp

jungeun960.tistory.com

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)]
 

20210302_코테공부

프로그래머스 # 가운데 글자 가져오기 def solution(s): answer = '' if len(s)%2 == 1: answer = s[len(s)//2] else: answer = s[len(s)//2-1 : len(s)//2+1 ] return answer # 같은 숫자는 싫어 def solution(ar..

jungeun960.tistory.com

 

대소문자 관리 함수 (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
반응형