본문 바로가기
Python

[Python] 자료 구조 - 문자열(string)

by 박사과정 모닝 2023. 10. 31.
반응형

문자열(string)

문자열은 문자들이 순서대로 나열된 시퀀스라고 생각하면 됩니다. 파이썬에서 문자열을 생성하려면 파이썬의 내장 클래스인 str 클래스를 사용하거나, 혹은 리터럴로 생성할 수도 있습니다.

s1 = str('hello') # 생성자로 생성
s2 = 'hello' #리터럴로 생성

 문자열은 '변경 불가능한 객체'입니다. 우리가 얼핏 보기엔 문자열이 수정된 것 처럼 보이지만, 이것은 기존의 객체가 수정된 것이 아닌 새로운 값을 나타내는 또 다른 객체인 것입니다. 

 

>> 문자열 인덱싱

문자열은 시퀀스 자료구조이기 때문에 인덱싱이나 슬라이싱이 가능합니다. 따라서 [ ] 사이에 인덱스 번호를 넣어, 문자열의 인덱스 번호에 대항하는 문자를 추출할 수 있습니다.

str = 'abcdefg'

print(str[0])
print(str[4])

'''
a
e
'''

문자열은 변경 불가능한 객체이기 때문에, 리스트에서처럼 아래와 같은 방법으로 인덱스를 활용한 값 변경을 시도하면 에러가 발생합니다.

str = 'abcdefg'
str[0] = 'A' #error 발생

 

>> 문자열 슬라이싱

인덱싱과 마찬가지로 인덱스의 범위를 지정하는 슬라이싱 또한 가능합니다.

str = 'abcdefg'
print(str[1:4])

'''
bcd
'''

 

>> 문자열의 문자 반복 처리

문자열은 시퀀스 객체이기 때문에, for 루프에서 반복된 연산을 할 수 있습니다.

str = 'abcdefg'
n=0
for i in str:
    print('{}번째 문자: {}'.format(n, i))
    n += 1
    
'''
0번째 문자: a
1번째 문자: b
2번째 문자: c
3번째 문자: d
4번째 문자: e
5번째 문자: f
6번째 문자: g
'''

 

>> 문자열 단어 분리

문자열은 split() 메서드를 사용해 토큰(문자)으로 분리할 수 있습니다. .split(분리기준)의 형식으로 사용하며, 공백이 기본값 입니다. 따라서 공백을 기준으로 문장을 분리하고 싶으면 .split()과 같이 사용하고, 쉼표를 기준으로 분리하고 싶으면 .split(,)처럼, 어떤 알파벳을 기준으로 분리하고 싶으면 .split('e')처럼 사용하면 됩니다.

str = 'hello my name is morning'
print(str.split())
'''
['hello', 'my', 'name', 'is', 'morning']
'''

 

>> 문자열 검사

문자열이 어떤 구성인지 검사할 수 있습니다.

  • .isalpha(): 알파벳으로만 이루어져 있는가?
  • .isdigit(): 숫자로만 이루어져 있는가?
  • .islower(): 소문자로만 이루어져 있는가?
  • .isupper(): 대문자로만 이루어져 있는가?
  • .isspace(): 공백으로만 이루어져 있는가?
  • .isalnum(): 영문 또는 숫자로만 이루어져 있는가?
str = 'hello'
print(str.isalpha())
print(str.isdigit())

'''
True
False
'''

 

>> 부분 문자열 검색

문자열 안의 부분 문자열은 아래의 메소드들을 활용해 찾을 수 있습니다.

  • startswith(s): s 문자열로 시작되는가? >> True/False 반환
  • endswith(s): s 문자열로 끝나는가? >> True/False 반환
  • find(s): s 문자열을 포함하는가? >> 왼쪽부터 찾음, 인덱스 반환
  • rfind(s): s 문자열을 포함하는가? >> 오른쪽부터 찾음, 인덱스 반환
  • count(s): s 가 몇 개 포함되는가?

 

>> 문자열 변환

문자열의 모든 문자를 대문자나 소문자로 만들려면 upper(), lower()를 사용합니다. 또는 첫 번째 문자만 대문자로 만드는 것도 가능하고, 문자를 치환할 수도 있습니다. 또는 소문자와 대문자를 서로 바꾸는 것도 가능합니다.

  • upper(): 모두 대문자로 수정
  • lower(): 모두 소문자로 수정
  • capitalize(), title(): 첫 글자만 대문자로 수정
  • replace(s1, s2): s1을 s2로 수정
  • swapcase(): 대문자를 소문자로, 소문자를 대문자로

 

>> format(), join(), partition(), find()

  • format(): 포맷을 만들어 놓고 일정한 규칙에 따라 문자열을 생성할 수 있습니다. 
str = '{}and{}'
print(str.format('a ',' b')
'''
a and b
'''
  • join(): 리스트와 같은 iterable 인자를 받아 문자열로 연결합니다.
str = ['a', 'b', 'c']
print('_'.join(str))
'''
a_b_c
'''
  • partition(): 구분문자로 문자열을 나누고, 결과를 튜플로 반환합니다.
str = '010-1234-5678'
print(str.partition('-')
'''
('010', '-', '1234', '-', '5678')
'''
  • find(): 특정 문자를 찾아 인덱스를 반환합니다.
str = 'abcde'
print(str.find(b))
'''
1
'''

 

>> strip(), lstrip(), rstrip()

  • strip():양쪽 공백 제거
  • lstrip(): 왼쪽 공백 제거
  • rstrip(): 오른쪽 공백 제거
  • 위 함수들은 가운데 포함된 공백 문자를 제거하지 않음
반응형