Data/Python

[Python] 파이썬 문자 자료형 - 인덱싱, 슬라이싱, 내장함수들

재은초 2023. 6. 17. 19:40
반응형

문자열(String)이란?

  • 문자열이란 문자의 나열을 의미하며, 띄어쓰기도 하나의 문자로 취급된다.
  • 큰 따옴표("")나 작은 따옴표('')로 한 줄의 문자열을 만들 수 있으며, 이스케이프 코드 (\n)나 작거나 큰 따옴표 3개로 여러줄의 문자열도 가능하다.
# 큰따옴표, 작은따옴표로 양쪽 둘러싸기
"Hello World"
'Python is fun'

# 큰따옴표, 작은따옴표 3개를 연속으로 써서 양쪽 둘러싸기
"""Life is too short, You need python"""
'''Life is too short, You need python'''

# 문자열에 작은따옴표 (') 포함시에는, 큰 따옴표(")로 둘러싸기
"Python's favorite food is perl"

# 문자열에 큰따옴표 (") 포함시에는, 작은 따옴표(')로 둘러싸기
'"Python is very easy." he says.'

# 백슬래시(\)를 사용해서 작은따옴표(')와 큰따옴표(")를 문자열에 포함시키기
'Python\'s favorite food is perl'
"\"Python is very easy.\" he says."

여러줄의 문자열 만들기

# 줄을 바꾸기 위한 이스케이프 코드 \n 삽입하기
>>> "Life is too short\nYou need python"
Life is too short
You need python

# 연속된 작은따옴표 3개(''') 또는 큰따옴표 3개(""") 사용
>>> """
>>> Life is too short
>>> You need python
>>> """
Life is too short
You need python
이스케이프 코드란?
프로그래밍할 때 사용할 수 있도록 미리 정의해 둔 문자 조합을 의미하며, 자주 사용하는 코드로는 \n (줄바꿈), \t (수평탭), \b (백스페이스), \000 (널문자), \문자 (문자 그대로)가 있다.

 

문자열 연산하기

+ 로 문자열 더하기

>>> head = "Python"
>>> tail = " is fun!"
>>> head + tail
'Python is fun!'

* 로 문자열 곱하기

>>> a = "python"
>>> a * 2
'pythonpython'

>>> print("=" * 50)
>>> print("My Program")
>>> print("=" * 50)
==================================================
My Program
==================================================

len 함수로 문자열 길이 구하기

>>> a = "Life is too short"
>>> len(a)
17


문자열 인덱싱(Indexing) - 가르킨다

  • 인덱싱이란 문자열의 각 문자마다 번호를 매겨서 문자열 내 특정한 값을 뽑아내는 역할을 한다.
  • 파이썬은 0부터 띄어쓰기 포함해서 숫자를 세며, 숫자가 양수면 앞에서부터 음수면 뒤에서부터 카운팅한다.
# 문자열 인덱싱 순서 - 파이썬은 0부터 숫자를 센다
Life is too short, You need Python
0         1         2         3 
0123456789012345678901234567890123

# 문자열 인덱싱 실행 - 문자변수명[번호]
>>> a = "Life is too short, You need Python"
>>> a[3]                                     # a 문자열의 3번째 문자
'e'
>>> a[-1]                                    #  a[-1]은 뒤에서부터 첫 번째
'n'
>>> a[-0]                                    # 0과 -0은 똑같은 0
'L'

 

문자열 슬라이싱(Slicing) - 잘라낸다

  • 인덱싱은 한글자, 슬라이싱은 범위를 뽑아낸다.
  • 슬라이싱은 변수명[시작 번호:끝 번호] 형식으로 지정하며, 끝 번호에 해당하는 것은 포함되지 않는다.
>>> a = "Life is too short, You need Python"
>>> a[0:3]                         
'Lif'                              # 0 <= a < 3
>>> a[12:17]                       
'short'

>>> a[19:]                         # 끝 번호 생략시 문자열 처음부터 끝까지
'You need Python'
>>> a[:17]                         # 시작 번호 생략시 문자열 처음부터 끝까지
'Life is too short'
>>> a[:]                           # 시작과 끝 번호 생략시 문자열 처음부터 끝까지
'Life is too short, You need Python'

>>> a[19:-7]                       # a[19]에서부터 a[-8]까지 -7은 미포함
'You need'
# 문자열 슬라이싱 응용
>>> a = "20010331Rainy"
>>> year = a[:4]           # 연도로 나누고
>>> day = a[4:8]           # 날짜로 나누고
>>> weather = a[8:]        # 날씨로 나누고
>>> year
'2001'
>>> day
'0331'
>>> weather
'Rainy'

# 문자열 바꾸기 
>>> a = "Pithon"          # "Pithon"이라는 문자열을 "Python"으로 바꾸기
>>> a[1]
'i'
>>> a[1] = 'y'            # 문자열, 튜플등의 자료형은 그 요소값을 변경할 수 없으므로 에러

>>> a = "Pithon"
>>> a[:1]
'P'
>>> a[2:]
'thon'
>>> a[:1] + 'y' + a[2:]   # 슬라이싱해서 나눠주고 새로운 y 글자 추가해야 함
'Python'

 

문자열 포매팅(Formatting)

  • 문자열 포매팅은 문자열 내에 일부에만 어떤 값을 삽입 및 대입하고 싶을 때 사용한다.
  • %d : 정수(Integer), %f : 부동소수(Floating-point)
>>> "I eat %d apples." % 3       # 1. 숫자넣고 싶은 자리에 %d 숫자 포맷 코드 삽입 
'I eat 3 apples.'                # 2. 삽입할 숫자는 가장 뒤 % 문자 다음에 씀

>>> number = 3
>>> "I eat %d apples." % number
'I eat 3 apples.'
  • %s : 문자열(String), %c : 문자(Character)
>>> "I eat %s apples." % "five"     
'I eat five apples.'             # 문자열 대입시 항상 큰 따옴표나 작은 따옴표

>>> "rate is %s" % 3.234         # %s는 자동으로 % 뒤에 있는 값을 문자열로 바꿈
'rate is 3.234'
  • %% : 그냥 문자 %
>>> "Error is %d%%." % 98
'Error is 98%.'
  • 2개 이상 일 때는 괄호 안에 콤마(,)로 구분
>>> number = 10                  
>>> day = "three"
>>> "I ate %d apples. so I was sick for %s days." % (number, day)
'I ate 10 apples. so I was sick for three days.'
  • 정렬과 공백 - 양수면 오른쪽 정렬, 음수면 왼쪽 정렬
>>> "%10s" % "hi"                 # 총 길이가 10인 문자열 내 hi를 오른쪽 정렬
'        hi'                      # 나머지는 공백

>>> "%-10sjane." % 'hi'           # 총 길이가 10인 문자열 내 hi를 왼쪽 정렬
'hi        jane.'

# 소수점 표현
>>> "%0.4f" % 3.42134234             # '.'는 소수점 포인트를 말하고
'3.4213'                             # 뒤 숫자 4는 소수점 뒤에 나올 숫자의 개수

>>> "%10.4f" % 3.42134234            # 소수점 네 번째 자리까지만 표시하고
'    3.4213'                         # 전체 길이가 10개인 공간에서 오른쪽 정렬

 

format 함수를 이용한 문자열 포매팅

  • 숫자 대입
>>> number = 3
>>> "I eat {0} apples".format(number)
'I eat 3 apples'
  • 문자 대입
>>> "I eat {0} apples".format("five")
'I eat five apples'
  • 2개 이상값 넣기
>>> number = 10
>>> day = "three"
>>> "{0} apples for {1} days".format(number, day)  # 순서대로
'10 apples for three days'

>>> "{number} apples for {day} days".format(number=10, day=3) # 이름으로
'10 apples for 3 days'

>>> "{0} apples for {day} days".format(10, day=3) # 순서 + 이름
'10 apples for 3 days'
  • 왼쪽, 오른쪽, 가운데 정렬
>>> "{0:<10}".format("hi","lol")     # 문자열 총 자릿수 10에 왼쪽(<) 정렬
'hi        '
>>> "{1:>10}".format("hi","lol")     # 문자열 총 자릿수 10에 오른쪽(>) 정렬
'       lol'
>>> "{0:^10}".format("hi","lol")     # 문자열 총 자릿수 10에 가운데(^) 정렬
'    hi    '
  • 공백 채우기
>>> "{0:=^10}".format("hi","lol")    # 빈 공간을 = 문자로 채움
'====hi===='
>>> "{0:!<10}".format("hi","lol")   
'hi!!!!!!!!'
  • 소숫점 표현하기
>>> y = 3.42134234
>>> x = 1.82938472
>>> "{0:0.4f}".format(y, x)       # 소수점 4자리까지만 표현
'3.4213'
>>> "{1:10.4f}".format(y, x)      # 자릿수 10으로 맞추고 소수점 4자리까지만 표현
'    1.8294'
  • {{ }} : 대괄호 문자 그대로
>>> "{{ and }}".format()
'{ and }'

 

f 문자열 포매팅

  • 파이썬 3.6버전부터 사용 가능
>>> name = '홍길동'
>>> age = 30
>>> f'나의 이름은 {name}입니다. 나이는 {age}입니다.'
'나의 이름은 홍길동입니다. 나이는 30입니다.'

# 표현식 지원
>>> age = 30
>>> f'나는 내년이면 {age+1}살이 된다.'          # +, - 같은 수식 사용 가능
'나는 내년이면 31살이 된다.'

# 딕셔너리 사용
>>> d = {'name':'홍길동', 'age':30}
>>> f'나의 이름은 {d["name"]}입니다. 나이는 {d["age"]}입니다.'
'나의 이름은 홍길동입니다. 나이는 30입니다.'

# 정렬
>>> f'{"hi":<10}'  # 왼쪽 정렬
'hi        '
>>> f'{"hi":>10}'  # 오른쪽 정렬
'        hi'
>>> f'{"hi":^10}'  # 가운데 정렬
'    hi    '

# 공백채우기
>>> f'{"hi":=^10}'  # 가운데 정렬하고 '=' 문자로 공백 채우기
'====hi===='
>>> f'{"hi":!<10}'  # 왼쪽 정렬하고 '!' 문자로 공백 채우기
'hi!!!!!!!!'

# 소수점
>>> y = 3.42134234
>>> f'{y:0.4f}'  # 소수점 4자리까지만 표현
'3.4213'
>>> f'{y:10.4f}'  # 소수점 4자리까지 표현하고 총 자리수를 10으로 맞춤
'    3.4213'

# {} 표현하려면 {{ }} 두번 사용 
>>> f'{{ and }}'
'{ and }'

 

문자열 관련 함수들

  • 문자 개수 세기(count)
>>> a = "hobby"
>>> a.count('b')                       # 문자열 a에 있는 'b'의 갯수 반환
2
  • 위치 알려주기(find)
>>> a = "Python is the best choice" 
>>> a.find('b')                         # 문자열 중 문자 b가 처음으로 나온 위치를 반환
14                                      # 파이썬은 숫자를 0부터 센다
>>> a.find('k')                         # 만약 찾는 문자 존재하지 않으면 -1 반환
-1
  • 위치 알려주기(index)
>>> a = "Life is too short"
>>> a.index('t')
8
>>> a.index('k')                       # 앞의 find 함수와 같으나 다른 점은
Traceback (most recent call last):     # 만약 찾는 문자 존재하지 않으면 오류 발생
File "<stdin>", line 1, in <module>
ValueError: substring not found
  • 문자열 삽입(join)
>>> ",".join('abcd')                   # abcd 문자 사이에 ','를 삽입한다는 뜻
'a,b,c,d'
>>> ",".join(['a', 'b', 'c', 'd'])     # 문자열, 리스트, 튜플에서도 가능
'a,b,c,d'
  • 소문자를 대문자로(upper), 대문자를 소문자로(lower)
>>> a = "hi"
>>> a.upper()                          # 이미 대문자면 아무 변화도 없음
'HI'
>>> a = "HI"
>>> a.lower()
'hi'
  • 공백 지우기: 왼쪽(lstrip), 오른쪽(rstrip), 양쪽(strip)
>>> a = " hi "
>>> a.lstrip()
'hi '

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

>>> a = " hi "
>>> a.strip()
'hi'
  • 문자열 바꾸기(replace)
>>> a = "Life is too short"          # .replace(바뀌어질 문자, 바꿀 문자)
>>> a.replace("Life", "Your leg")
'Your leg is too short'
  • 문자열 나누기(split)
>>> a = "Life is too short"
>>> a.split()                        # 괄호 값이 없으면 공백기준으로 나뉨
['Life', 'is', 'too', 'short']       # 이렇게 나눈 값은 리스트에 하나씩 들어간다

>>> a = "a:b:c:d"
>>> a.split(':')
['a', 'b', 'c', 'd']
  • 문자 논리 연산 함수들
>>> a = '1234'                       # str 타입이지만 온전히 숫자라 숫자형
>>> b = '1/2'
>>> c = '가나다'
>>> d = '가나다123'
>>> e = '3²'

# isdigit() 문자열이 '숫자'로 이루어져 있는지
>>> print(a.isdigit()) # True
>>> print(b.isdigit()) # False
>>> print(c.isdigit()) # False
>>> print(d.isdigit()) # False
>>> print(e.isdigit()) # True

# isdecimal() int로 바로 변환할 수 있는 수인지
>>> print(a.isdecimal()) # True
>>> print(b.isdecimal()) # False
>>> print(c.isdecimal()) # False
>>> print(d.isdecimal()) # False 
>>> print(e.isdecimal()) # False    # 특수문자는 숫자로 취급하지 않음

# isnumeric() 수로 볼 수 있는 모든 것
>>> print(a.isnumeric()) # True
>>> print(b.isnumeric()) # False
>>> print(c.isnumeric()) # False
>>> print(d.isnumeric()) # False 
>>> print(e.isnumeric()) # True

# isalpha() 알파벳으로만 이루어진 문자열 판별
>>> print(a.isalpha()) # False
>>> print(b.isalpha()) # False
>>> print(c.isalpha()) # True 
>>> print(d.isalpha()) # False 
>>> print(e.isalpha()) # False

 

Reference

반응형