[파이썬 일기] #4.2.3 순서열(Sequence)
Python 2009/04/28 18:35 |사전에서 Sequence를 찾아보면 순서, 연속물 이런 뜻으로 나온다. 파이썬의 Sequence는 이런 뜻으로는 설명이 어렵다. 누군가 이것을 이 바닥 용어로 적절하게 의역했다. "순서열"이다. C/C++/C# 또는 Java 경험이 있다면 순서열이 배열과 비슷하고 생각하면 된다. 아니, 비슷하다는 표현이 적절하지 않은 것 같다. 생김새는 비슷하지만 사용하기는 더 쉽고 더 강력한 기능을 제공하기 때문이다.
한편, 파이썬의 순서열 밑에는 여러 세부 자료형들이 존재한다. 순서열은 불변 순서열과 가변 순서열로 구분 되는데, 불변 순서열에는 문자열(String), 튜플(Tuple), 불변 바이트 배열이 있고 가변 순서열에는 리스트, 가변 바이트 배열이 있다. 종류가 6가지나 된다. 하지만 걱정하진 않아도 될 것 같다. Numeric이 그랬던 것처럼 같은 범주 안에 있는 자료형들은 대부분의 속성들을 공유하기 때문이다. 순서열의 기본 속성을 문자열을 통해 알아보자.
문자열을 선언하는 방법은 작은 따옴표(')나 큰 따옴표(")의 짝으로 문자열을 감싸는 것이다. 다음과 같이 말이다.
>>> s = "This is a string."
>>> t = 'This is a string, too.'
>>> s
'This is a string.'
>>> t
'This is a string, too.'
>>> type(t)
<class 'str'>
>>>
파이썬의 문자열은 문자의 집합이기 전에 순서열임을 잊지 말자. 순서열은 두 순서열을 결합하는 + 연산자를 제공한다. 따라서 순서열의 세부 자료형인 문자열도 + 연산자를 이용하여 두 문자열을 결합할 수 있다.
>>> hello = "Hello"
>>> world = ", World"
>>> hello_world = hello + world
>>> hello_world
'Hello, World'
순서열은 + 연산자 뿐만 아니라 쓸모가 많은 여러 연산자를 지원한다. 다음 코드에 그 예가 있다.
>>> s = 'Hello, World.'
>>> s[3:5] # s의 3번째부터 5번째까지 자르기(Slicing)
'lo'
>>> 'o' in s # 'o' 가 순서열 s 안에 들어 있는가
True
>>> 'x' in s # 'x' 가 순서열 s 안에 들어 있는가
False
>>> s * 3 # 순서열 s를 3번 복사해 붙여 넣기
'Hello, World.Hello, World.Hello, World.'
>>> s[8] # 8번째 문자
'o'
>>> len(s) # s의 길이
13
>>> min(s) # s의 최소값
' '
>>> max(s) # s의 최대값
'r'
파이썬을 사용하다가 다시 C나 Java를 사용하게 되면 답답해질 것 같아 벌써부터 걱정이 든다. 기존에 다뤄봤던 언어에서 제공하던 배열에 비해 훨씬 유연하고 강력하다. 그 중에서도 특히 자르기(slicing)가 아주 백미다. 그런데 자르기라고 하니 용어가 쉽게 와 닿지 않는다. 그냥 슬라이싱이라고 해야겠다.
앞에서는 매개 변수를 한 개, 두 개만 넣었지만 슬라이싱은 원래 아래와 같이 세 개의 매개 변수를 받는다.
보폭이 왜 필요한지 잘 이해가 안됐는데 실제로 사용해보니까 상당히 쉽다.
>>> s = 'Hello, World.'
>>> s[0:len(s):1] #0번부터 문자열의 끝까지 1개의 요소마다 1개를 골라 슬라이싱
'Hello, World.'
>>> s[0:len(s):2] #0번부터 문자열의 끝까지 2개의 요소마다 1개를 골라 슬라이싱
'Hlo ol.'
>>> s[0:len(s):3] #0번부터 문자열의 끝까지 3개의 요소마다 1개를 골라 슬라이싱
'Hl r.'
>>> s[0:len(s):4] #0번부터 문자열의 끝까지 4개의 요소마다 1개를 골라 슬라이싱
'Hoo.'
>>> s[0:len(s):20] #0번부터 문자열의 끝까지 20개의 요소마다 1개를 골라 슬라이싱
그러고 보니 아까 예로 사용했던 s[3:5]는 s[3:5:1]을 줄인 표현이었다. s[8]은 s[8:8:1]을 줄인 표현이고 말이다. 슬라이싱은 아주 유연하다. 다음과 같이 앞/뒤 매개 변수를 생략해서 사용할 수도 있다.
>>> s = 'Hello, World.'
>>> s[:5] #s[0:5:1] 과 같음
'Hello'
>>> s[7:] #s[7:len(s):1] 과 같음
'World.'
재미있다. 이제 겨우 자료형을 공부해 나가고 있는 중인데 문법이 손에 착 감기는 느낌이다. 다음에는 순서열의 세부 자료형들을 차근차근 살펴봐야겠다.
'Python' 카테고리의 다른 글
| [파이썬 일기] #4.2.3.2 튜플(Tuple)과 리스트(List) (0) | 2009/05/07 |
|---|---|
| [파이썬 일기] #4.2.3.1 문자열 (0) | 2009/04/30 |
| [파이썬 일기] #4.2.3 순서열(Sequence) (0) | 2009/04/28 |
| [파이썬 일기] #4.2.2 Numeric 자료형 (0) | 2009/04/22 |
| [파이썬 일기] #4.2.1 파이썬에는 상수가 없다! (0) | 2009/04/21 |
| [파이썬 일기] #4.2. 파이썬에서 데이터 다루기 (0) | 2009/04/20 |

댓글을 달아 주세요