Programming/Python

[코딩도장-파이썬] 시퀀스(Sequence) 자료형 활용하기 3

Supreme_YS 2020. 11. 11. 17:01

*shell 환경이 아닌 스크립트(script) 환경에서 작업했기 때문에 print로 출력. shell 환경이라면 print 생략 가능


._시퀀스 객체의 각 요소는 순서가 정해져 있으며, 이 순서를 인덱스(index)라고 부른다. 인덱스는 위치 값을 뜻하는데 시퀀스 객체의 인덱스는 항상 0부터 시작한다.

형태 : 시퀀스객체[인덱스]

 

예.

a = [1, 2, 3 ,4, 5]
print(a[0]) #리스트의 첫 번째 인덱스0 요소 출력
print(a[1]) #리스트의 두 번째 인덱스1 요소 출력
print(a[2]) #리스트의 세 번째 인덱스2 요소 출력
print(a[3]) #리스트의 네 번째 인덱스3 요소 출력
print(a[4]) #리스트의 다섯 번째 인덱스4 요소 출력

인덱스는 0부터 시작한다. 출처. 코딩도장

마찬가지로 튜플, range, 문자열도 [ ]에 인덱스를 지정하면 해당 요소를 가져올 수 있다.

예.

 

b = (38, 21, 53, 62, 19)
print(b[0])        # 튜플의 첫 번째(인덱스 0) 요소 출력

r = range(0, 10, 2)
print(r[2])        # range의 세 번째(인덱스 2) 요소 출력

hello = 'Hello, world!'
print(hello[7])    # 문자열의 여덟 번째(인덱스 7) 요소 출력

 

._시퀀스 객체에 인덱스를 지정하지 않으면 리스트 전체가 출력된다.

._ __getitem__ method

시퀀스 객체에서 [ ](대괄호)를 사용하면 실제로는 __getitem__ 메서드를 호출하여 요소를 가져온다. 따라서 아래와 같이 __getitem__ 메서드를 직접 호출하여 요소를 가져올 수 있다.

예.

a = [38, 21, 53, 62, 19]
print(a.__getitem__(1))

결과값 : 21

 

._음수 인덱스 

시퀀스 객체에 인덱스를 음수로 지정하면 뒤에서부터 요소에 접근하게 된다. 즉, -1은 뒤에서 첫 번째, -5는 뒤에서 다섯 번째 요소이다. 따라서 a[-1]은 뒤에서 첫 번째 요소인 19, a[-5]는 뒤에서 다섯 번째 요소인 38이 나온다.

 

._물론 튜플, range, 문자열도 마찬가지로 음수 인덱스를 적용할 수 있다.

 

._인덱스 범위를 벗어나면 IndexError가 발생한다. 

예.

a = [1, 2, 3, 4, 5]

print(a[5]) # IndexError 발생.

 

리스트 a의 요소 개수는 5개인데 a[5]와 같이 지정하면 리스트의 범위를 벗어나게 되므로 에러가 발생한다. 왜냐하면 인덱스는 0부터 시작하므로 마지막 요소의 인덱스는 4이기 때문이다. 즉, 마지막 요소의 인덱스는 시퀀스 객체의 요소 개수보다 1 작다. 마찬가지로 튜플, range, 문자열도 범위를 벗어난 인덱스를 지정하면 IndexError가 발생한다.

 

예.

print(a[len(a)-  1]) #인덱스 범위 - 1로 a의 마지막 요소 출력

a[] 인덱스 안에 a객체의 길이-1 = 4니까 a[4]를 출력하는 것과 같다. 시퀀스의 마지막 인덱스를 구할 때 사용하는 방법

 

._요소에 값 할당하기

 

예.

c = [0, 0, 0, 0, 0]
a[0] = 1
a[1] = 2
a[2] = 3
a[3] = 4
a[4] = 5

print(c)

결과값 : [1, 2, 3, 4, 5]

 

._하지만 tuple, range, 문자열은 안에 저장된 요소를 변경할 수 없다. 즉, 시퀀스 자료형에서 tuple, range, 문자열은 읽기 전용이다. 

 

._요소 삭제하기

형태 : del 시퀀스객체[인덱스]

예.

d = [1, 2, 3, 4, 5]
del d[2] #d의 세번째 객체 값 삭제
print(d)
결과값 : [1, 2, 4, 5] 출력

 

._하지만 tuple, range, 문자열은 안에 저장된 요소를 변경할 수 없기 때문에 tuple, range, 문자열은 요소 삭제 불가