[파이썬] 문자열 자료형

Dragony·2020년 3월 27일
0

파이썬

목록 보기
5/14

문자열(String) 이란 문자, 단어 등으로 구성되 문자들의 집합을 의미한다.

문자열 생성 및 사용

  1. 큰 따옴표(")로 양쪽 둘러싸기
    • "hello world"
  2. 작은 따옴표(')로 양쪽 둘러싸기
    • 'hello world'
  3. 큰 따옴표 3개를 연속(""")으로 써서 양쪽 둘러싸기
    • """Life is too short, you need python"""
  4. 작은 따옴표 3개를 연속(''')으로 써서 양쪽 둘러싸기
    • '''Life is too short, you need python'''

문자열 연산

  1. 문자열 더해서 연결하기 (Concatenation)
  2. 문자열 곱하기 (* , 여러 번 반복되어 나옴)

문자열 인덱싱과 슬라이싱

"파이썬은 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'

문자열 포맷팅(Formatting)

문자열 포맷팅이란 문자열 내에 어떤 값을 삽입하는 방법이다.

  1. 숫자 바로 대입
>>> "I eat %d apples" %3
'I eat 3 apples'
  1. 문자열 바로 대입
>>> "I eat %s apples" %"five"
'I eat five apples'
  1. 숫자 값을 나타내는 변수로 대입

>>> number=3
>>> "I eat %d apples." %number
'I eat 3 apples.'
  1. 2개 이상의 값 넣기

>>> 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%.'

포맷코드와 숫자 함께 사용하기

  1. 정렬과 공백

>>> "%10s" %"hi"
'        hi'

"%10s"의 의미는 전체 길이가 10개인 문자열 공간에서 hi를 오른쪽으로 정렬하고 그 앞의 나머지는 공백으로 남겨두라는 의미이다.

반대 쪽인 왼쪽 정렬은 "%-10s"가 될 것이다.

  1. 소수점 표현하기

>>> "%0.4f" %3.42134234
'3.4213'

소수점 네 번째 자리까지만 나타내고 싶은 경우에는 위와 같이 사용한다.

문자열 관련 내장함수

  1. 문자 개수 세기(count)

>>> a="hobby"
>>> a.count('b')
2

문자열 중 문자 b의 개수를 반환한다.

  1. 위치 알려주기(1)(find)

>>> a="Python is best choice"
>>> a.find('b')
10
>>> a.find('k')
-1

문자열 중 문자 b가 처음 나온 위치를 반환한다.
만약 찾는 문자나 문자열이 존재하지 않는다면 -1을 반환한다.

  1. 위치 알려주기(2) (index)

>>> a.index('k')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: substring not found
>>> a.index('t')
2

문자열 t가 맨 처음으로 나온 위치를 반환한다.
찾는 문자나 문자열이 존재하지 않는다면 오류를 발생시긴다.

  1. 문자열 삽입(join)

>>> a=","
>>> a.join('abcd')
'a,b,c,d'

abcd라는 문자열의 각각의 문자 사이에 변수 a의 값인 ','를 삽입한다.

  1. 소문자를 대문자로 바꾸기(upper)

>>> a="hi"
>>> a.upper()
'HI'
  1. 대문자를 소문자로 바꾸기(lower)

>>> a="HI"
>>> a.lower()
'hi'
  1. 왼쪽 공백 지우기(lstrip)

>>> a=" hi"
>>> a.lstrip()
'hi'

문자열 중 가장 왼쪽에 있는 한 칸 이상의 연속된 공백들을 모두 지운다.
lstrip에서 l은 왼쪽(left)를 의미한다.

  1. 오른쪽 공백 지우기(rstrip)

>>> a="hi "
>>> a.rstrip()
'hi'
  1. 양쪽 공백 지우기(strip)

  2. 문자열 바꾸기(replace)

  • replace("바뀌게 될 문자열", "바꿀 문자열")
  1. 문자열 나누기(split)

>>> 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 함수를 이용하면 좀 더 발전된 스타일로 문자열 포맷을 지정할 수 있다.

  1. 숫자 바로 대입하기

>>> "I eat {0} apples".format(3)
'I eat 3 apples'
  1. 문자열 바로 대입하기

>>> "I eat {0} apples".format("five")
'I eat five apples'
  1. 숫자 값을 가진 변수로 대입하기

>>> number=3
>>> "I eat {0} apples".format(number)
'I eat 3 apples'
  1. 2개 이상 값 넣기

>>> "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함수의 입력값들로 순서에 맞게 바뀐다.

  1. 이름으로 넣기

>>> "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.'
>>>
  1. 인덱스와 이름 혼용해서 넣기

>>> "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으로 맞출 수 있다.

  1. 오른쪾 정렬

:< 대신 :>을 이용하면 된다

  1. 가운데 정렬

:^을 이용함

  1. 공백채우기

:=^
11. 소수점 표현하기

profile
안녕하세요 :) 제 개인 공부 정리 블로그입니다. 틀린 내용 수정, 피드백 환영합니다.

0개의 댓글