상세 컨텐츠

본문 제목

파이썬 - 문자열(Strings)

프로그래밍 언어/파이썬

by 별을 보는 사람 2021. 2. 16. 07:00

본문

반응형

문자열(Strings)

문자열은 일련의 문자들을 뜻한다. 파이썬에서 String 리터럴은 큰 따옴표("") 나 작은타옴표('')로 묶인다.

예) my_string = 'Hello'

파이썬에서 문자열은 불변성을 가진다. (처음 생성후 변경이 불가)

 

 

 

문자열 생성

# 큰 따옴표나 작은 따옴표를 사용.
my_string = 'Hello'
my_string = "Hello"
my_string = "I' m  a 'Geek'"

# escaping backslash - \(backslash) 뒤에 문자나 숫자가 오는 조합을 뜻한다.
my_string = 'I\' m  a "Geek"'
my_string = 'I\' m a \'Geek\''
print(my_string)


I' m a 'Geek'


# 여러줄 표현에는 """을 사용한다.
my_string = """Hello
World"""
print(my_string)

Hello
World


# 문장의 줄바꿈을 할 경우 \(백슬레쉬)를 사용한다.
# \(백슬레쉬)의 의미 -> 아직 문장이 끝나지 않았다.
my_string = "Hello \
World"
print(my_string)

Hello World

 

문자열과 스브스트링에 접근

my_string = "Hello World"

# 인덱스를 사용해 문자에 접근
b = my_string[0]
print(b)

H


# 슬라이싱 기능으로 문자열 자르기
b = my_string[1:3] # 첫번째 인덱스는 포함되지 않는다.
print(b)

el


b = my_string[:5] # 첫문자 부터 시작해 다섯문자 반환
print(b)

Hello


b = my_string[6:] # 0번째 문자열 부터 시작해 6번째 문자열 부터 끝까지 반환
print(b)

World


b = my_string[::2] # 주어진 문자열에서 처음서 부터 끝까지 2번째 문자열만 반환 
print(b)

HloWrd


b = my_string[::-1] # 주어진 문자열에서 뒤에서 부터 시작해서 반환(reverse)
print(b)

dlroW olleh

 

문자열 연결 (Concatenate)

# 파이썬에선 '+'를 이용해 문자열 연결한다.
greeting = "Hello"
name = "Tom"
sentence = greeting + ' ' + name
print(sentence)

Hello Tom

 

문자열에서 반복문 사용

# 문자열에서 반복문은 for in loop을 사용한다.
my_string = 'Hello'
for i in my_string:
    print(i)
    
H
e
l
l
o 

 

문자열이나 서브스트링 존재 여부 확인

if "e" in "Hello":
    print("yes")
if "llo" in "Hello":
    print("yes")
    
yes
yes

 

문자열에서 사용 가능한 함수들

my_string = "     Hello World "

# 공백 제거
my_string = my_string.strip()
print(my_string)

Hello World


# 문자 수
print(len(my_string))

11


# 소문자, 대문자 표현
print(my_string.upper())
print(my_string.lower())

HELLO WORLD
hello world


# 문자열의 시작 혹은 끝 매치 확인
print("hello".startswith("he"))
print("hello".endswith("llo"))

true
true


# 주어진 부분 문자열의 첫 번째 인덱스를 찾고, 그렇지 않으면 -1 반환
print("Hello".find("o"))

4


# 문자나 서브스트링 수 리턴
print("Hello".count("e"))

1


# 문자열을 다른 문자열로 교체(문자열이 존재할 경우에만 해당)
# 중요 : 원본 문자열은 그대로 유지.
message = "Hello World"
new_message = message.replace("World", "Universe")
print(new_message)

Hello Universe


# 문자열을 리스트로 나누기
my_string = "how are you doing"
a = my_string.split() # 기본 인자는 " "(공백 문자)가 사용 된다.
print(a)

['how', 'are', 'you', 'doing']


my_string = "one,two,three"
a = my_string.split(",")
print(a)

['one', 'two', 'three']


# 리스트의 항목들을 문자열로 결합하다
my_list = ['How', 'are', 'you', 'doing']
a = ' '.join(my_list) # 주어진 문자열의 구분자는 공백 문자가 된다.
print(a)

How are you doing

 

파이썬의 포맷팅

파이썬의 포맷팅 방법은 .format() 함수를 이용하거나 % 연산자를 사용합니다.

# 중괄호를 자리 표시 자로 사용
a = "Hello {0} and {1}".format("Bob", "Tom")
print(a)

Hello Bob and Tom


# 기본 순서의 위치는 선택 사항입니다. (번호로 표시하거나 빈 중괄호 사용)
a = "Hello {} and {}".format("Bob", "Tom")
print(a)

Hello Bob and Tom


a = "The integer value is {}".format(2)
print(a)

The integer value is 2


# 숫자에 대한 포맷 형식
a = "The float value is {0:.3f}".format(2.1234)
print(a)

The float value is 2.123


a = "The float value is {0:e}".format(2.1234)
print(a)

The float value is 2.123400e+00


a = "The binary value is {0:b}".format(2)
print(a)

The binary value is 10


# %를 이용한 예전 스타일 포멧 방식
print("Hello %s and %s" % ("Bob", "Tom")) # 타중 인수를 사용할 경우 튜플을 사용한다.

Hello Bob and Tom


val =  3.14159265359
print("The decimal value is %d" % val)

The decimal value is 3


print("The float value is %f" % val)

The float value is 3.141593


print("The float value is %.2f" % val)

The float value is 3.14   

 

f-Strings

Python 3.6 이후의 중괄호 안에 직접 변수를 사용하는 것이 가능해졌다.

name = "Eric"
age = 25
a = f"Hello, {name}. You are {age}."
print(a)
pi = 3.14159
a = f"Pi is {pi:.3f}"
print(a)
# f-Strings은 런타임에 인식되어 실행된다.
a = f"The value is {2*60}"
print(a)

 

문자열의 불변성에 대한 고찰

# 문자열은 불변성을 가짐으로 + 또는 +=로 문자열을 추가하면 
# 항상 새 문자열이 생성되어 다중 작업에 비용이 많이 듭니다.
# 이런 경우 join 함수를 이용하면 빠른 실행이 가능합니다.

from timeit import default_timer as timer
my_list = ["a"] * 1000000

# bad
start = timer()
a = ""
for i in my_list:
    a += i
end = timer()
print("concatenate string with + : %.5f" % (end - start))

# good
start = timer()
a = "".join(my_list)
end = timer()
print("concatenate string with join(): %.5f" % (end - start))

concatenate string with + : 0.16690
concatenate string with join(): 0.00956

 

반응형

관련글 더보기

댓글 영역