나열형(sequence)은 데이터들의 집합이며 기본적인 나열형 객체는 list, tuple, range 등이다. str형과 bytes형, bytearray 등도 나열형에 속한다. (나열형은 기본적으로 iterable 이다.)
[표 1] 대표적인 가변(mutable) 불변(immutable) 나열형
mutable 시퀀스 | immutable 시퀀스 |
list, bytes, bytearray | str, tuple, range |
다음 표는 가변/불변 나열형 객체에서 지원하는 연산을 우선 순위 차례로 나열한 것이다. x는 임의의 객체이고 s, s1, s2는 나열형 객체들을 표기한다. n, i, j, k는 정수이다.
[표 2] 나열형의 기본 연산의 종류
연산 | 결과 |
x in s x not in s | s의 한 요소가 x와 같다면 True s의 한 요소가 x와 같다면 False |
s1 + s2 s*n 혹은 n*s | 두 시퀀스를 결합한다. 시퀀스를 n번 반복한다. (immutable 시퀀스의 경우 항상 새로운 시퀀스를 생성한다.) |
s[i] | i번째 요소 (0부터 시작) |
s[i:j] | i번째 부터 j-1번째 요소까지의 슬라이스 |
s[i:j:k] | i번째 부터 j-1번째 요소까지의(k는 스텝) 슬라이스 |
len(s) | 요소의 개수 |
min(s) | 가장 작은 요소 |
max(s) | 가장 큰 요소 |
s.index(x[, i[, j]]) | x와 같은 첫 번째 요소의 인덱스 |
s.count(x) | x와 같은 요소들의 개수 |
같은 형의 나열형 객체끼리는 비교도 가능하다. 특히 리스트와 튜플은 길이와 같은 인덱스를 가지는 모든 요소들끼리 같다면 두 리스트/튜플은 같은 것으로 판별된다.
>>> ‘gg’ in ‘eggs’True |
나열형 객체의 복사는 ‘얕은 복사’라는 것도 유의해야 한다. 즉, 중첩된 구조는 복사되지 않는다.
>>> lst=[ [] ]*3>>> lst[[], [], []]>>> lst[0].append(1)>>> lst[[1], [1], [1]] |
이 예제는 곱(*) 복사가 ‘얕은 복사’이기 때문에 원래의 빈 리스트의 참조를 복사해서 붙임을 알 수 있다. 따라서 하나가 변하면 다른 것들도 변한다. 같은 참조를 가지기 때문이다.
서로 다른 리스트를 만들려면 다음과 같이 하면 된다.
lst = [ [] for _ in range(3)]>>> lst[[], [], []]>>> lst[0].append(1)>>> lst[1].append(2)>>> lst[2].append(3)>>> lst[[1], [2], [3]] |
만약 ‘깊은 복사’를 수행하려면 copy 모듈의 deepcopy 함수를 이용하면 된다.
>>> x=[11,22]>>> y=[x, 33]>>> y[[11, 22], 33]>>> from copy import deepcopy>>> z = deepcopy(y)>>> z[[11, 22], 33]>>> x[0]=-44>>> y[[-44, 22], 33] #x가 변하면 y도 변한다.>>> z[[11, 22], 33] # x가 변해도 z는 변함이 없다. |
가변 나열형 객체의 경우 다음과 같은 조작이 추가로 가능하다.
[표 3] 가변 나열형 객체의 조작
연산 | 결과 |
s[i] = x | s의 i번째 요소를 x로 교체 |
s[i:j] = t | i번째 요소부터 j-1번째 요소를 t(iterable)로 교체 |
del s[i:j] | i번째 요소부터 j-1번째 요소를 삭제 ( s[i:j] = [] 와 동일) |
s[i:j:k] = t | i번째 요소부터 j-1번째 요소(k는 스텝)를 t(iterable)로 교체 ➊ |
del s[i:j:k] | i번째 요소부터 j-1번째 요소(k는 스텝)를 삭제 |
s.append(x) | s의 마지막 요소로 x를 삽입 |
s.extend(t) | t의 내용물로 s를 확장 ( s[len(s):len(s)]=t 와 동일) |
s.insert(i, x) | i 번째에 x를 삽입 |
s.pop() s.pop(i) | 마지막 삭제하고 그것을 반환한다. i 번째 요소를 삭제하고 그것을 반환한다. |
s.remove(x) | s의 요소 중 x와 같은 첫 번째 것을 제거 ➋ |
s.reverse() | 요소들을 역순으로 배열한다. ➌ |
s.clear() | 모든 요소 삭제 (del s[:] 과 동일) ver3.3부터 도입 |
s.copy() | 얕은 복사본 생성 (s[:] 와 동일) ver3.3부터 도입 |
➊ t 와 슬라이싱 된 요소들의 크기가 같아야 한다.
➋ s 안에 x가 없다면 ValueError 예외가 발생한다.
➌ 요소의 순서를 역순으로 바꾼다. ( 역순으로 바뀐 객체가 반환되는 것이 아니다.)
'프로그래밍언어.Lib > 파이썬' 카테고리의 다른 글
파이썬의 for반복문과 range형 (1) | 2015.05.26 |
---|---|
파이썬의 if ~ elif ~ else 구문 (0) | 2015.05.26 |
파이썬 딕셔너리 내장 메소드(method) (0) | 2015.05.25 |
파이썬의 딕셔너리(dict형) 개요 (0) | 2015.05.25 |
파이썬의 튜플(tuple) (0) | 2015.05.25 |