개발
파이썬 리스트 슬라이싱 [:], [::] 정리 (콜론, 더블콜론)
by
난 실무에 파이썬을 잘 이용하지는 않지만 정보처리기사를 준비하는도중 파이썬 관련 문법이 몇번 제법 나와서 알게된 사항이다.
개인적으로 공부도하고 정리도 할겸 포스팅을 남겨본다.
파이썬 리스트 슬라이싱
리스트 슬라이싱(List Slicing)이라고 파이썬에서 리스트를 다룰때 사용하는 선택자 기법이 있다.
우리가 흔히 리스트(배열)에서 특정 데이터 구간을 빼온다 싶으면 아래와 같이 작성해서 그 결과를 가져온다.
letters = ['a', 'b', 'c', 'd', 'e']
subset = []
for i in range(1, 4): # 인덱스 1부터 3까지
subset.append(letters[i])
print(subset) # 출력: ['b', 'c', 'd']Copy파이썬에선 이런 방식은 직관적이지 않다고 생각했는지 아래와 같은 방식으로 배열 속 데이터를 얻는 방식을 고안해서 사용하고있다.
letters = ['a', 'b', 'c', 'd', 'e']
subset = letters[1:4]
print(subset) # 출력: ['b', 'c', 'd']Copyletters[1:4] 의 뜻은 letters 배열 리스트에서 인덱스 1부터 3까지 (끝 4를 제외한)의 데이터를 지칭하는 의미로 range(1, 4)를 뜻한다.확실히 사용방법만 알면 훨씬 간단하고 직관적인 코드를 제공한다.
여기에 이제 좀 부가적인 처리가 들어가게 되면서 좀 복잡해지기 시작한다.
간격을 줘서 가져오는 방법
단순하게 1, 2, 3 을 가져오는 방식이면 위에처럼
[1:4]를 지정하면되지만, 1, 3, 5... 처럼 특정 간격으로 띄워져 있는 정보를 가져와야할땐 어떻게 해야할까?대부분 기존 언어는 이럴 경우 if(index % 2) 이런식으로 조건문을 걸어 아래와 같이 처리했다.
a = [0, 1, 2, 3, 4, 5, 6, 7]
selected = []
for i in range(len(a)): # 0부터 끝까지 모든 인덱스 순회
if i % 2 == 0: # 인덱스가 2로 나눠 떨어질 때만
selected.append(a[i])
print(selected) # 출력: [0, 2, 4, 6]Copy하지만 파이썬에선 이러는게 줄 수 만 늘리고 언스마트 하다고 생각했는지, 이럴때 step 옵션을 이용하는걸로 이를 해결할 수 있게 했다.
a = [0, 1, 2, 3, 4, 5, 6, 7]
selected = a[0::2]
print(selected) # 출력: [0, 2, 4, 6]Copy리스트 슬라이싱은 단계적으로
[시작인덱스:마지막인덱스:스탭] 이런 방식의 입력을 지원받는다.위의 예제같은 경우엔
[0::2]로 아래와 같이 입력되어 처리되게된다.- 시작인덱스: 0 (처음부터)
- 마지막인덱스: null (끝까지)
- 스탭: 2 (2칸씩 건너뛰며)
0의 경우엔 생략도 가능하니 위의 코드는
selected = a[::2] 이런식으로도 적을 수 있는것이다.이게 다른 언어만 공부했던 입장에선 정말 생소한 방식의 표기(더블콜론이라니...)라 처음보면 적잖게 당황하게된다.
마이너스 인덱스
이건 리스트 슬라이싱을 하다가 더불어 알게된건데, 파이썬은 마이너스 인덱스를 지원한다.
쉽게말해 앞에서부터 0으로 시작한다면, 맨뒤에서부턴 -1부터 시작한다는 논리이다.
a = ['a', 'b', 'c', 'd', 'e']
양수 인덱스: 0 1 2 3 4
요소: 'a' 'b' 'c' 'd' 'e'
음수 인덱스: -5 -4 -3 -2 -1Copy그래서 실제로 특정 리스트에서 해당 배열칸을 지칭하는 인덱스는 1개가 아니라 위에처럼 2개가 되어서 실제 인덱스로 값을 접근할때
a[0] == a[-5] 이런 식의 조건문이 참으로 성립 되는것이다.그래서 이런 마이너스 인덱스를 그대로 리스트 슬라이싱에도 이용이 가능하다.
print(a[-3:]) # ['c', 'd', 'e'] (끝에서 세 번째부터 끝까지)
print(a[:-2]) # ['a', 'b', 'c'] (끝에서 두 번째 요소 전까지)Copy실제 a 리스트를 위와같이 출력해보면 첫번째 열은 -3(2)에서 -1(4)까지의 인덱스의 결과가 나오게되고, 두번째열은 0에서 -3(2)까지의 인덱스의 결과가 나오게된다.
리스트 슬라이싱 문제
복습겸 아래 문제를 한 번 풀어보자.
| 다음 파이썬 코드의 실행결과를 고르시오. |
|---|
|
① [‘apple’, ‘banana’, ‘cherry’] ② [‘banana’, ‘cherry’, ‘date’] ③ [‘banana’, ‘cherry’] ④ [‘cherry’, ‘date’, ‘elderberry’] |
해설
위 배열의 인덱스는 아래와 같음.
| 0 | 1 | 2 | 3 | 4 |
| 'apple' | 'banana' | 'cherry' | 'date' | 'elderberry' |
| -5 | -4 | -3 | -2 | -1 |
a[-4:-1] 이므로,
- 시작: -4 ('banana')
- 끝: -1 전까지 ('date'까지)
으로 화면에는 ② [‘banana’, ‘cherry’, ‘date’] 리스트가 출력된다.
#Python
0
개의 댓글