문자열(String) 이란 문자, 단어 등으로 구성되 문자들의 집합을 의미한다.
"파이썬은 0부터 숫자를 센다"
a[-1]이 뜻하는 것은 뒤에서 부터 읽기 위해서 마이너스(-) 기호를 사용하는 것인데, a[-1]은 뒤에서부터 세어 첫 번째가 되는 문자를 말한다.
그리고 0과 -0은 똑같은 것이기 때문에 a[-0]과 a[0]은 똑같이 첫 문자를 보여준다.
a[0:3]이 나타내는 것은 0<=a<3에 해당하는 문자열을 뽑아내는 것을 의미한다.
a[19:] 끝 번호 부분읋 생략하면 시작번호 부터 그 문자열의 끝까지 뽑아낸다.
a[:17]은 문자열의 처음부터 끝 번호까지 뽑아낸다.
a[:]은 문자열의 처음부터 끝까지 뽑아낸다.
a[19:-7]은 a[19]에서부터 a[-8]까지를 말한다.
이 슬라이싱으로 문자열을 나눌 수 있다.
>>> a="20010331Rainy"
>>> year=a[:4]
>>> day=a[4:8]
>>> weather=a[8:]
>>> year
'2001'
>>> day
'0331'
>>> weather
'Rainy'
>>>
'pithon'이라는 문자열을 'python'으로 바꾸려면 어떻게 해야 할까?
>>> a="pithon"
>>> a[1]
'i'
>>> a[1]='y'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
이렇게 요소에 직접 접근해서 바꿔주려고 하면 에러가 발생한다.
왜냐하면 문자열의 요소값은 바꿀 수 있는 값이 아니기 때문이다.
문자열, 튜플 등의 자료형은 그 요소값을 변경할 수 없다. 그래서 immutable 한 자료형이라고도 부른다.
그럼 어떻게 바꿀 수 있을까?
다음과 같은 방법을 사용한다.
>>> a[:1]+'y'+a[2:]
'python'
문자열 포맷팅이란 문자열 내에 어떤 값을 삽입하는 방법이다.
>>> "I eat %d apples" %3
'I eat 3 apples'
>>> "I eat %s apples" %"five"
'I eat five apples'
>>> number=3
>>> "I eat %d apples." %number
'I eat 3 apples.'
>>> number=3
>>> day="three"
>>> "I ate %d apples. so I was sick for %s days" %(number,day)
'I ate 3 apples. so I was sick for three days'
3을 문자열 안에 삽입하려면 %d를 사용하고, 3.234를 삽입하려면 %f를 사용해야 한다. 하지만 %s를 사용하면 이런 것을 생각하지 않아도 된다. %s는 자동으로 %뒤에 있는 값을 문자열로 바꾸기 때문이다.
포매팅 연산자 %d와 %를 같이 쓸 때는 %%를 쓴다.
>>> "Error is %d%%." %98
'Error is 98%.'
>>> "%10s" %"hi"
' hi'
"%10s"의 의미는 전체 길이가 10개인 문자열 공간에서 hi를 오른쪽으로 정렬하고 그 앞의 나머지는 공백으로 남겨두라는 의미이다.
반대 쪽인 왼쪽 정렬은 "%-10s"가 될 것이다.
>>> "%0.4f" %3.42134234
'3.4213'
소수점 네 번째 자리까지만 나타내고 싶은 경우에는 위와 같이 사용한다.
>>> a="hobby"
>>> a.count('b')
2
문자열 중 문자 b의 개수를 반환한다.
>>> a="Python is best choice"
>>> a.find('b')
10
>>> a.find('k')
-1
문자열 중 문자 b가 처음 나온 위치를 반환한다.
만약 찾는 문자나 문자열이 존재하지 않는다면 -1을 반환한다.
>>> a.index('k')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not found
>>> a.index('t')
2
문자열 t가 맨 처음으로 나온 위치를 반환한다.
찾는 문자나 문자열이 존재하지 않는다면 오류를 발생시긴다.
>>> a=","
>>> a.join('abcd')
'a,b,c,d'
abcd라는 문자열의 각각의 문자 사이에 변수 a의 값인 ','를 삽입한다.
>>> a="hi"
>>> a.upper()
'HI'
>>> a="HI"
>>> a.lower()
'hi'
>>> a=" hi"
>>> a.lstrip()
'hi'
문자열 중 가장 왼쪽에 있는 한 칸 이상의 연속된 공백들을 모두 지운다.
lstrip에서 l은 왼쪽(left)를 의미한다.
>>> a="hi "
>>> a.rstrip()
'hi'
양쪽 공백 지우기(strip)
문자열 바꾸기(replace)
>>> a="Life is too short"
>>> a.split()
['Life', 'is', 'too', 'short']
>>> a="a:b:c:d"
>>> a.split(':')
['a', 'b', 'c', 'd']
a.split() 처럼 괄호 안에 아무런 값도 넣어 주지 않으면 공백을 기준으로 문자열을 나누어 준다.
특정 값이 있을 경우에는 괄호 안의 값을 구분자로 해서 문자열을 나누어준다.
나눈 값은 리스트에 하나씩 들어가게 된다.
문자열의 format 함수를 이용하면 좀 더 발전된 스타일로 문자열 포맷을 지정할 수 있다.
>>> "I eat {0} apples".format(3)
'I eat 3 apples'
>>> "I eat {0} apples".format("five")
'I eat five apples'
>>> number=3
>>> "I eat {0} apples".format(number)
'I eat 3 apples'
>>> "I eat {0} apples. so I was sick for {1} days".format(number,day)
'I eat 3 apples. so I was sick for three days'
2개 이상 값을 넣을 경우, 문자열의 {0}, {1}과 같은 인덱스 항복들이 format함수의 입력값들로 순서에 맞게 바뀐다.
>>> "I ate {number} apples. so I was sick for {day} days.".format(number=10, day=3)
'I ate 10 apples. so I was sick for 3 days.'
>>>
>>> "I ate {0} apples. so I was sick for {day} days.".format(10, day=3)
'I ate 10 apples. so I was sick for 3 days.'
7.왼쪽 정렬
>>> "{0:<10}".format("hi")
'hi '
:<10 표현 식을 이용하면 치환되는 문자열을 왼쪽으로 정렬하고 문자열의 총 자릿수를 10으로 맞출 수 있다.
:< 대신 :>을 이용하면 된다
:^을 이용함
:=^
11. 소수점 표현하기