7. 문자열 정의 및 기초 연산




1 시퀀스 자료형의 지원 연산


1-1 시퀀스 자료형이란?

  • 저장된 각 요소를 정수 Index를 이용하여 참조가 가능한 자료형
  • 시퀀스(Sequence) 자료형: 문자열, 리스트, 튜플
In [1]:
s = 'abcdef'
L = [100, 200, 300]
t = ('tuple', 'object', 1, 2)
  • 시퀀스 자료형이 가지는 공통적인 연산
    • 인덱싱 (Indexing)
    • 슬라이싱 (Slicing)
    • 확장 슬라이싱 (Extended Slicing)
    • 연결 (Concatenation)
    • 반복 (Repitition)
    • 멤버쉽 테스트 (Membership Test)
    • 길이 정보 (Length)
    • for ~ in 문

1-2 인덱싱

In [2]:
s = 'abcdef'
l = [100, 200, 300]
print(s[0])
print(s[1])
print(s[-1])
print()
print(l[1])
l[1] = 900
print(l[1])
a
b
f

200
900
In [3]:
print(l[100])
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-3-bd1a663e00f3> in <module>()
----> 1 print(l[100])

IndexError: list index out of range

1-3 슬라이싱

  • L[start:end]: start는 inclusive, end는 exclusive
In [4]:
s = 'abcdef'
L = [100, 200, 300]

print(s[1:3])
print(s[1:])
print(s[:])
print(s[-100:100])
print()
print(L[:-1])     # L[:2] 와 동일
print(L[:2])
bc
bcdef
abcdef
abcdef

[100, 200]
[100, 200]

1-4 확장 슬라이싱

  • L[start:end:step]: 인덱싱되어지는 각 원소들 사이의 거리가 인덱스 기준으로 step 만큼 떨어짐
In [5]:
s = 'abcd'
print(s[::2])   #step:2 - 각 원소들 사이의 거리가 인덱스 기준으로 2가 됨
print(s[::-1])  #step:-1 - 왼쪽 방향으로 1칸씩
ac
dcba

1-5 연결하기

In [6]:
s = 'abc' + 'def'
print(s)

L = [1,2,3] + [4,5,6]
print(L)
abcdef
[1, 2, 3, 4, 5, 6]

1-6 반복하기

In [7]:
s = 'abc'
print(s * 4)

L = [1, 2, 3]
print(L * 2)
abcabcabcabc
[1, 2, 3, 1, 2, 3]

1-7 멤버십 테스트

In [10]:
s = 'abcde'
print('c' in s)

t = (1, 2, 3, 4, 5)
print(2 in t)
print(10 in t)
print(10 not in t)
True
True
False
True
In [2]:
print('ab' in 'abcd')
print('ad' in 'abcd')
print(' ' in 'abcd')
print(' ' in 'abcd ')
True
False
False
True

1-8 길이 정보

In [3]:
s = 'abcde'
l = [1, 2, 3]
t = (1, 2, 3, 4)
print(len(s))
print(len(l))
print(len(t))
5
3
4

1-9 for~in 문

In [13]:
for c in 'abcd':
    print(c, end=" ")
a b c d 

2 문자열 정의하기


2-1 한 줄 문자열

In [14]:
s = ''
str1 = 'Python is great!'
str2 = "Yes, it is."
str3 = "It's not like any other languages"
In [15]:
str4 = 'Don\'t walk. "Run"'
print(str4)
Don't walk. "Run"
  • \ : 다음 라인이 현재 라인의 뒤에 이어짐을 나타냄
In [16]:
long_str = "This is a rather long string \
containing back slash and new line.\nGood!"
print(long_str)
This is a rather long string containing back slash and new line.
Good!

2-2 여러 줄 문자열

In [17]:
multiline = """ While the rest of the world has been catching on to
the Perl scripting language, the Linux commnunity,
long since past the pleasing shock of Perl's power,
has been catching on to a different scripting animal -- Python."""
print(multiline)

print()

ml = ''' While the rest of the world has been catching on to
the Perl scripting language, the Linux commnunity,
long since past the pleasing shock of Perl's power,
has been catching on to a different scripting animal -- Python.'''
print(ml)
 While the rest of the world has been catching on to
the Perl scripting language, the Linux commnunity,
long since past the pleasing shock of Perl's power,
has been catching on to a different scripting animal -- Python.

 While the rest of the world has been catching on to
the Perl scripting language, the Linux commnunity,
long since past the pleasing shock of Perl's power,
has been catching on to a different scripting animal -- Python.

2-3 이스케이프 문자 (Escape Characters)

  • 문자열 내부의 이스케이프 문자
이스케이프 문자 의미
\ \ \
\' '
\" "
\b 백스페이스
\n 개행
\t
\0nn 8진법 수 nn
\xnn 16진법 수 nn
In [4]:
print('\\abc\\')
print()
print('abc\tdef\tghi')
print()
print('a\nb\nc')
\abc\

abc	def	ghi

a
b
c

2-3 문자열 연산

In [19]:
str1 = 'First String'
str2 = 'Second String'
str3 = str1 + ' ' + str2
print(str3)
print(str1 * 3)
print()
print(str1[2])
print(str1[1:-1])
print(len(str1))
print()
print(str1[0:len(str1)])
First String Second String
First StringFirst StringFirst String

r
irst Strin
12

First String
  • 문자열 자료 - Immutable (변경불가능)
In [20]:
str1[0] = 'f'
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-20-7213ba3e679f> in <module>()
----> 1 str1[0] = 'f'

TypeError: 'str' object does not support item assignment
In [21]:
str1[0:3] = 'abc'
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-21-08d42bad7f22> in <module>()
----> 1 str1[0:3] = 'abc'

TypeError: 'str' object does not support item assignment
  • 문자열 변경을 위해서는 여러 Slicing 연결 활용
    • [주의] 문자열 자체가 변경되는 것이 아니라 새로운 문자열을 생성하여 재할당하는 것임
In [22]:
s = 'spam and egg'
s = s[:4] + ', cheese, ' + s[5:]
print(s)
spam, cheese, and egg

2-4 유니코드

  • 다국어 문자의 올바른 표현을 위하여 유니코드 타입 지원이 됨
  • 유니코드 타입의 문자열 리터럴: u'Hello'
  • 하지만 Python 3 부터는 모든 str은 기본적으로 Unicode로 저장되기 때문에 u 표기 리터럴을 사용할 필요가 없음
    • Since Python 3.0, the language features a str type that contain Unicode characters, meaning any string created using "unicode rocks!", 'unicode rocks!', or the triple-quoted string syntax is stored as Unicode [Source: https://docs.python.org/3/howto/unicode.html].
In [1]:
print(u'Spam and Egg')
print()
a = 'a'
b = u'bc'
print(type(a))
print(a)
print(type(b))
print(b)
print()
c = a + b
print(type(c))
print(c)
Spam and Egg

<class 'str'>
a
<class 'str'>
bc

<class 'str'>
abc
In [3]:
print('Spam \uB610 Egg')    # 문자열 내에 유티코드 이스케이프 문자인 \uHHHH 사용가능, HHHH는 4자리 16진수 (unicode 포맷)
Spam 또 Egg
In [5]:
#a = unicode('한글', 'utf-8')     # '한글' 문자열의 인코딩 방식을 'utf-8'로 인식시키며 unicode로 변환 --> python3 부터는 지원되지 않음
a = str('한글')
print(type(a))
print(a)


# <type 'unicode'>
# 한글
<class 'str'>
한글
In [7]:
print(len('한글과 세종대왕'))
#print(len(unicode('한글과 세종대왕', 'utf-8')))   #python 3 에서 지원하지 않음
print(len(u'한글과 세종대왕'))
8
8
In [5]:
# u = unicode('한글과 세종대왕', 'utf-8')    #python 3에서 지원하지 않음 
u = str('한글과 세종대왕')    #python 3 부터는 임의의 str은 유니코드이기 때문에 한글이 포함된 str에 대해서도 인덱싱 및 슬라이싱이 올바르게 수행됨 
print(u[0])
print(u[1])
print(u[:3])
print(u[4:])
print(u[::-1])
print()
u2 = u'한글과 세종대왕' 
print(u2[0])
print(u2[1])
print(u2[:3])
print(u2[4:])
print(u2[::-1])
print()
u3 = '한글과 세종대왕'
print(u3[0])
print(u3[1])
print(u3[:3])
print(u3[4:])
print(u3[::-1])
print()
한
글
한글과
세종대왕
왕대종세 과글한

한
글
한글과
세종대왕
왕대종세 과글한

한
글
한글과
세종대왕
왕대종세 과글한

참고 문헌: 파이썬(열혈강의)(개정판 VER.2), 이강성, FreeLec, 2005년 8월 29일