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




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


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

  • 저장된 각 요소를 정수 Index를 이용하여 참조가 가능한 자료형
  • 시퀀스(Sequence) 자료형: 문자열, 리스트, 튜플
In [2]:
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 [1]:
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 [2]:
print l[100]
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-2-dd85adc9a089> in <module>()
----> 1 print l[100]

IndexError: list index out of range

1-3 슬라이싱

  • L[start:end]: start는 inclusive, end는 exclusive
In [7]:
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 [8]:
s = 'abcd'
print s[::2]   #step:2 - 각 원소들 사이의 거리가 인덱스 기준으로 2가 됨
print s[::-1]  #step:-1 - 왼쪽 방향으로 1칸씩
ac
dcba

1-5 연결하기

In [21]:
s = 'abc' + 'def'
print s

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

1-6 반복하기

In [1]:
s = 'abc'
print s * 4

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

1-7 멤버십 테스트

In [25]:
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 [10]:
print 'ab' in 'abcd'
print 'ad' in 'abcd'
print ' ' in 'abcd'
print ' ' in 'abcd '
True
False
False
True

1-8 길이 정보

In [11]:
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 [2]:
for c in 'abcd':
    print c,
a b c d

2 문자열 정의하기


2-1 한 줄 문자열

In [30]:
s = ''
str1 = 'Python is great!'
str2 = "Yes, it is."
str3 = "It's not like any other languages"
In [32]:
str4 = 'Don\'t walk. "Run"'
print str4
Don't walk. "Run"
  • \ : 다음 라인이 현재 라인의 뒤에 이어짐을 나타냄
In [33]:
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 [12]:
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 [21]:
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 [47]:
str1[0] = 'f'
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-47-7213ba3e679f> in <module>()
----> 1 str1[0] = 'f'

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

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

2-4 유니코드

  • 다국어 문자의 올바른 표현을 위하여 유니코드 타입 지원이 됨
  • 유니코드 타입의 문자열 리터럴: u'Hello'
In [2]:
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

<type 'str'>
a
<type 'unicode'>
bc

<type 'unicode'>
abc
In [20]:
print u'Spam \uB610 Egg'    # 문자열 내에 유티코드 이스케이프 문자인 \uHHHH 사용가능, HHHH는 4자리 16진수 (unicode 포맷)
Spam 또 Egg
In [3]:
a = unicode('한글', 'utf-8')     # '한글' 문자열의 인코딩 방식을 'utf-8'형태로 인식시키면서 해당 문자열을 unicode로 변환
print type(a)
print a
<type 'unicode'>
한글
In [19]:
print len('한글과 세종대왕')
print len(unicode('한글과 세종대왕', 'utf-8'))   #유니코드 타입의 문자열은 한글 문자열 길이를 올바르게 반환함
print len(u'한글과 세종대왕')
22
8
8
In [22]:
u = unicode('한글과 세종대왕', 'utf-8')    #유니코드 타입의 한글 문자열에 대해서는 인덱싱 및 슬라이싱이 올바르게 수행됨 
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일