본문 바로가기

파이썬 Python

초급 5 문자열

문자열

hello = "Hello! I'm Python"
quote = 'He said, "Connecting the dots"'

print(hello)
print(quote)

파이썬에서는 문자열을 선언할 때 "큰따옴표"와 '작은따옴표' 둘 다 사용 가능하다. 따라서 위와 같이 '(작은따옴표)나 "(큰따옴표)를 포함한 문자열 선언이 가능하다.

C언어에서는 문자열 내부에 "나 '를 사용하려면 이스케이프 시퀀스(Escape Sequence)를 반드시 사용해야 한다.

e.g. "Hello! I\'m Python", "He said, \"Connecting the dots\""

파이썬에서도 이스케이프 시퀀스 사용이 가능하다.

 

문자열 인덱싱(indexing)

In:

hello = "hello"

print(hello[0])
print(hello[-1])

Out:

h
o

 

slicing

str[n:m:step]

문자열에서 n번째 문자(포함)부터 step 간격의 문자를 m-1번째 문자까지 남겨두고 잘라낸다.

In:

fruit = "Apple, Banana, Orange"

print(fruit[0:5])
print(fruit[0:9:2])
print(fruit)

print(fruit[7:])
print(fruit[:13])
print(fruit[0:-8])

Out:

Apple
Ape a
Apple, Banana, Orange
Banana, Orange
Apple, Banana
Apple, Banana

 

문자열 함수

 

In:

fruit = "Apple, Banana, Orange"

index = fruit.find('a')
print(index)

index = fruit.find("Ba")
print(index)

index = fruit.find('c')
print(index)

index = fruit.index('a')
print(index)

index = fruit.index("Or")
print(index)

fruit.index('f')

Out:

8
7
-1
8
15
Traceback (most recent call last):
  File "C:/Users/Public/PythonStudy/Week1/lecture5/test4.py", line 18, in <module>
    fruit.index('f')
ValueError: substring not found

find를 사용하면 찾는 문자(열)이 없을 때 -1을 반환하지만 index를 사용했을 때는 에러가 발생한다.

 

In:

fruit = "Apple, Banana, Orange"

upper_str = fruit.upper()
print(upper_str)

lower_str = fruit.lower()
print(lower_str)

print(fruit)

Out:

APPLE, BANANA, ORANGE
apple, banana, orange
Apple, Banana, Orange

upper와 lower는 새로운 문자열을 반환하고 기존 문자열을 바꾸지 않는다.

 

In:

fruit = "Apple, Banana, Orange"

result1 = fruit.replace("Orange", "Grape")
print("Result: " + result1)
print("Fruit: " + fruit)
fruit = result1

result2 = fruit.split(',')  # 인자로 아무것도 입력하지 않으면 공백 기준
print(result2)
print(type(result2))

print("===============================")
for i in result2:
    print(i.strip())  # 앞뒤 공백 제거

print(result2)

print("===============================")
for i in range(0, len(result2)):
    result2[i] = result2[i].strip()

print(result2)

Out:

Result: Apple, Banana, Grape
Fruit: Apple, Banana, Orange
['Apple', ' Banana', ' Grape']
<class 'list'>
===============================
Apple
Banana
Grape
['Apple', ' Banana', ' Grape']
===============================
['Apple', 'Banana', 'Grape']

 

replace는 첫 번째 인자로 준 문자열을 두 번째 인자로 치환한 문자열을 반환한다.

split은 특정 문자를 기준으로 문자열을 나눠 list로 반환한다. 인자로 아무것도 주지 않으면 공백문자를 기준으로 나눈다.

strip은 앞뒤 공백을 제거한 문자열을 반환한다. 기존의 문자열을 바꾸지는 않는다.

test = "   apple banana orange   "
print(test.strip())
print(test.lstrip())
print(test.rstrip())

왼쪽 혹은 오른쪽의 공백만 제거하는 lstrip과 rstrip도 있다.

 

시퀀스 자료형(Sequence type)

리스트, 문자열, range

 

시퀀스 자료형 공통 함수

index, +, *

>>> range(0,10)[1]
1

>>> [1, 2, 3, 4] + ['apple', 'banana']
[1, 2, 3, 4, 'apple', 'banana']

>>> range(0, 4) + range(4, 9)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'range' and 'range'

>>> [range(0, 4)] + [range(4, 9)]
[range(0, 4), range(4, 9)]

>>> list(range(0, 4)) + list(range(4, 9))
[0, 1, 2, 3, 4, 5, 6, 7, 8]

 

 

range의 경우 + 연산자의 사용법이 조금 다르다.

 

in, not in

>>> 5 in [1,2,3,4,5]
True

>>> 'H' in "Hello"
True

>>> 'c' in "Hello"
False

>>> 'c' not in "Hello"
True

 

len

>>> len(range(0, 10))
10