Programming/Python

[Python 3.7] 파이썬 인덱스와 슬라이스 (2)

Nirsa 2020. 1. 12. 20:33
반응형

1편 : https://nirsa.tistory.com/41?category=861479

4.  슬라이스에 인덱스 증가폭 사용

range와 마찬가지로 슬라이스에도 인덱스 증가폭을 사용하여 요소에 접근할 수 있습니다.

시퀀스객체[시작인덱스:끝인덱스:증가폭] 으로 사용하면 되고 마찬가지로 문법에 익숙해지기 위해 a = list(range(0, 110, 10)) 을 사용해 리스트를 생성 후 a[3:10:3] 으로 30, 60, 90 만 출력 하겠습니다.

1편에서 말한것과 같이 슬라이스를 사용할때에 끝 인덱스에 적은 숫자 -1 까지 요소에 접근하게 되니 a[3:10] 을 사용하면 a[3] ~ a[9] 까지 접근하게 됩니다. 여기서 a[3:10:3], 즉 a[3] 부터 a[9]까지 요소에 접근하되 증가폭이 3 이기 때문에 위의 이미지와 같이 요소에 접근 합니다.

슬라이스를 사용할때에 첫 인덱스와 끝 인덱스를 생략할 수 있는데, 생략하게되면 가장 처음 또는 가장 끝을 뜻하게 됩니다.

 

a[:] 는 처음부터 끝까지를 의미 하므로 아래 이미지와 같이 됩니다.

 

a[:9] 는 처음부터 a[8] 까지(끝인덱스 -1)를 의미 하므로 아래 이미지와 같이 됩니다.

 

a[2:] 는 a[2] 부터 끝까지를 의미 하므로 아래 이미지와 같이 됩니다.

 

a[:] 안에 시작 인덱스던 끝 인덱스던 비어두면 처음 또는 마지막을 의미하게 됩니다. 이런것들을 사용하여 당연히 증가폭도 사용 됩니다. (ex. a[2:10:3]) 

여기까지 리스트만을 사용하여 어떻게 요소에 접근하는지 보았는데 같은 시퀀스 자료형인 튜플, range, 문자열 모두 동일하게 사용 가능 합니다. (range와 문자열은 당연히 변수에 할당 후 슬라이스를 사용해야 합니다)

 

5. 슬라이스를 사용하여 요소 할당

1편에서 인덱스를 활용하여 요소를 할당 하였는데, 당연히 슬라이스를 사용해서도 가능 합니다.

a[2:5] = ['a', 'b', 'c'] 를 입력 후 출력해보니 20, 30, 40 이 들어있어야 할 자리에 a, b, c 가 할당 되었습니다. 시작 인덱스, 끝 인덱스를 맞추지 않아도 상관은 없지만 확인해야할 점이 있습니다. 

ㄱ) 지정한 인덱스 범위보다 할당할 요소가 더 많은 경우 지정한 범위 사이에 할당한 요소만큼 추가 됩니다. 

 

ㄴ) 지정한 인덱스 범위보다 할당할 요소가 더 적은 경우 지정한 범위에 있던 원래 요소가 삭제된 후 할당할 요소가 추가 됩니다.

증가폭 활용하여 요소에 접근하듯이 할당과 아래에 작성할 삭제또한 증가폭을 활용할 수 있습니다.

 

6. 슬라이스 사용하여 요소 삭제

슬라이스 또한 요소를 삭제할때는 del 슬라이스객체[시작인덱스:끝인덱스] 를 사용하시면 됩니다.

* 단 튜플, range, 문자열은 del을 사용하여 슬라이스를 삭제할 수 없습니다.

 

이번엔 마지막으로 증가폭도 한번 사용하여 del을 삭제 해보겠습니다. ( del a[:8:2] )

시작 인덱스를 비웠으니 처음( a[0] )부터 a[7] (끝 인덱스 -1) 까지 2칸씩 증가하며 삭제를 하고, a[6] 이후 2칸을 뛰면 a[8] 이지만 끝 인덱스가 a[7] 이므로 a[6]까지만 삭제 됩니다. 

반응형