파이썬 문자열

문자열 다루기

문자열은 파이썬에서 씨퀀스 sequence 입니다.

 

iterable 중에서 순서가 있는 것이 있고 없는 것이 있는데

 

문자열은 순서가 있기 때문에 Sequence 입니다.

 

순서가 있다는 말은 인덱스를 사용할 수 있다는 말과 같겠죠?

 

IDLE 로 알아보겠습니다.

 

>>> s1 = 'SPAM'
>>> s1
'SPAM'
>>> len(s1)
4
>>> s1[0]
'S'
>>> s1[1]
'P'
>>> s1[2]
'A'
>>> s1[3]
'M'
>>> s1[4]
Traceback (most recent call last):
  File "<pyshell#8>", line 1, in <module>
    s1[4]
IndexError: string index out of range
>>> 

원초적으로 0부터 4까지 인덱스를 찍어봤지만 4에서 에러가 납니다. IndexError 는 범위를 벗어났기 때문에 일어났습니다. 인덱스는 0부터 시작입니다.

 

* len 함수는 문자열 개수를 리턴합니다.

 

>>> s1 = 'My-Python'
>>> s1[-1]
'n'
>>> s1[-2]
'o'
>>> s1[-3]
'h'
>>> 

거꾸로 가는 방법도 있습니다. 인덱스를 -1로 지정하면 제일 끝에 있는 문자를 리턴합니다.

 

>>> s1[len(s1)-1]
'n'
>>> 

아무래도 이녀석 보다는 -1이 더 직관적이죠.

 

C계열에서 sizeof 연산자에 대한 피로감을 보완한 것 같습니다.

 

>>> s1[1:2]
'y'
>>> s1[0:2]
'My'
>>> s1[2:5]
'-Py'
>>> s1[3:-1]
'Pytho'
>>> s1[3:]
'Python'
>>> s1[:]
'My-Python'

 

파이썬의 인덱스에는 슬라이스 기능도 있습니다. 하나씩 실행을 시켜보면 알 수 있습니다.

 

씨퀀스(Sequence)에 주목해야 하는 이유는 인덱스의 순서가 있기 때문에 위와 같은 연산이 유연해집니다.

 

>>> s1
'My-Python'
>>> s1+ '-your-Python'
'My-Python-your-Python'
>>> s1 * 3
'My-PythonMy-PythonMy-Python'
>>> 

 

문자열을 접합하는 것을 연결 concatenation 이라고 합니다. + 기호를 사용하면 문자열간에는 연결 concatenation 합니다.

 

* 기호는 문자열을 반복 repetition 하는 기능입니다.

 

불변성 immutable

 

파이썬의 문자열은 불변성 immutable 의 특징을 가지고 있습니다. 이 말은 문자열의 한 부분을 고칠 수 없다는 뜻 입니다. 언뜻 이해가 안되니 코드로 확인해보겠습니다.

>>> s = 'HelloPython'
>>> s[0]
'H'
>>> s[0] = 'G'
Traceback (most recent call last):
  File "<pyshell#40>", line 1, in <module>
    s[0] = 'G'
TypeError: 'str' object does not support item assignment
>>> 

네 문자열을 고칠 수가 없습니다. 문자열을 고치지 못하게 막아놓았기 때문에 전체 문자열을 생성하도록 되어있습니다.

>>> s
'HelloPython'
>>> s1 = s + 'HelloItsMe'
>>> s1
'HelloPythonHelloItsMe'

 

파이썬에는 불변성을 갖는 객체들과 가변성을 갖는 객체로 나뉘어 집니다.

 

불변성은

 

1. 숫자, 문자열, 튜플

 

가변성은

 

2. 리스트, 딕셔너리, 집합

 

입니다.

 

아까 씨퀀스 Sequence 개념과 불변성 Immutable 은 파이썬에서 반복되는 개념으로 중요합니다.

 

문자열을 리스트로 변환하여 개별 문자를 바꾼다음 다시 문자열로 조립하는 방법도 있습니다. 하지만 번거롭게 보이죠.

>>> s
'HelloPython'
>>> list(s)
['H', 'e', 'l', 'l', 'o', 'P', 'y', 't', 'h', 'o', 'n']
>>> list1 = list(s)
>>> list1
['H', 'e', 'l', 'l', 'o', 'P', 'y', 't', 'h', 'o', 'n']
>>> list1[0] = 'G'
>>> list1
['G', 'e', 'l', 'l', 'o', 'P', 'y', 't', 'h', 'o', 'n']
>>> s = ''.join(list1)
>>> s
'GelloPython'

영문자를 바이트코드로 바꿔서 결합하는 방법도 있습니다.

 

바이트를 다루기 때문에 뭔가 효율적으로 보이지만 여기선 유니코드를 쓸 수 없습니다.

>>> B1 = bytearray(b'Hello')
>>> B1.extend(b'Python')
>>> B1
bytearray(b'HelloPython')
>>> B1.decode()
'HelloPython'

 

문자열 찾기

find 메소드로 문자열을 검색할 수 있습니다.

myString = 'Find String'
find = myString.find('in')

print(find)

>> 1

위의 코드는 문자열 in 과 매치하는 지점을 찾아 첫번째 인덱스를 리턴합니다.

 

문자열 대체

문자열을 대체합니다.

 

매개변수는 검색할 문자열과 대체할 문자열입니다. 두개 이상이 매치가 되도 문자열을 전부 대체합니다.

 

물론 문자열은 immutable 이기 때문에 새로운 문자열이 생성됩니다.

 

보이지 않게 생성되기 때문에 프로그래머는 그 사실을 알 필요도 없죠.

myString = 'Find String'
find = myString.replace('ind','ound')

print(find)

>>Found String

 

Split 함수 문자열 분리하기

문자열을 분리하는 경우 리스트로 분리합니다. 구분자도 별도로 지정할 수 있습니다.

 

myString = 'I|am|a|Programmer'
newString = myString.split('|')

print(newString)

>>['I', 'am', 'a', 'Programmer']

 

isalpha 알파벳인지 확인

isalpha 는 알파벳인지 확인합니다. 공백, 특수문자가 하나라도 들어가 있으면 False 입니다.

 

순수하게 알파벳만 들어가야 합니다.

 

myString = 'Programmer'
newString = myString.isalpha()

print(newString)

>>True


대소문자 변환

대문자와 소문자로 변환합니다.

 

upper 와 lower를 사용합니다.

 

myString = 'Python Lesson'
newString = myString.upper()

print(newString)

>>PYTHON LESSON

newString = myString.lower()

print(newString)

>>python lesson

 

strip 메소드

strip 제거하다는 뜻입니다. 양옆 사이드의 공백을 제거합니다. 스페이스 뿐만 아니라 '\n' 도 제거됩니다.

 

myString = ' Python Lesson '
newString = myString.rstrip()

print("["+newString+"]")

>>[ Python Lesson]
myString = ' Python Lesson '

newString = myString.lstrip()
print("["+newString+"]")

[Python Lesson ]
myString = ' Python Lesson '

newString = myString.strip()
print("["+newString+"]")

>>[Python Lesson]

 

formatting 기본

포맷팅의 기본이다. 텍스트의 양식을 만들기 위해 필요합니다.

myString = 'Python Lesson'
newString = myString.lstrip()

print(f"{myString} test")
print("%s test" % myString)
print("{0} test".format(myString))

 

메소드 보기 dir(스트링)

dir 메소드를 사용하면 문자열이 사용할 수 있는 메소드 리스트를 볼 수 있다.

 

여러가지가 많은데 __add__ 를 사용하는 것은 클래스 연산자 오버로딩 챕터에서 자세히 알게 된다.

 

보통은 + 를 사용하는 원리에 대한 내용이다.

 

myString = 'Python Lesson'

print(dir(myString))

print(myString.__add__(' again'))

>>['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', 
'__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__',
'__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__',
'__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__',
'__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__',
'__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode',
'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum',
'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower',
'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust',
'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust',
'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip',
'swapcase', 'title', 'translate', 'upper', 'zfill']


Python Lesson again

 

메소드의 사용법을 알고 싶을때

help 함수를 사용한다. 함수를 실행시키지 않고 함수의 참조만 전달하도록 한다.

myString = 'Python Lesson'

print(help(myString.replace))

공유하기

facebook twitter kakaoTalk kakaostory naver band