파이썬 리스트의 [:a:b]는 뭘까? ([x:y:z], [:x:y], [::x],[::], [:a:b:c], [:a:b], [::a])

초록·2023년 12월 2일
0

다른 사람의 파이썬 알고리즘 풀이를 보다가 a[:a:b]라는 문법을 봤는데, 처음 보는 문법이라 구글링을 해봤지만 쉽게 답을 찾을 수 없었습니다.

더블 콜론 :: ([start:stop_before:step])

결국 이 문법이 무엇인지 찾았는데, 더블 콜론이라는 문법이라고 합니다.
collection[start:stop_before:step] 이렇게 쓰며, start 인덱스부터 (stop_before - 1)인덱스까지의 원소들을 step만큼 징검다리를 뛰어서 추출한다고 보시면 됩니다.

a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print(a[2:7:1]) #[2, 3, 4, 5, 6]
print(a[2:7:2]) # [2, 4, 6]
print(a[2:7:3]) # [2, 5]
print(a[2:7:4]) # [2, 6]


# [:x:y]
0부터 9까지 10개의 숫자를 가진 리스트 a를 기준으로 시도해보았습니다.
```python
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print(a[:7:1]) # [0, 1, 2, 3, 4, 5, 6]
print(a[:7:2]) # [0, 2, 4, 6]
print(a[:7:3]) # [0, 3, 6]
print(a[:7:4]) # [0, 4]

print(a[:9:1]) # [0, 1, 2, 3, 4, 5, 6, 7, 8]
print(a[:9:2]) # [0, 2, 4, 6, 8]
print(a[:9:3]) # [0, 3, 6]
print(a[:9:4]) # [0, 4, 8]

[:stop_before:], [::step], [::], [:0:-1]

다양하게도 시도해보았는데, stop_before값이 없으면 마지막 인덱스로, step값이 없으면 1처럼 작동하는 것으로 보입니다.
[::step][:0:-1] 경우는 유용하게 쓰일 수도 있겠네요.

a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print(a[:8:]) # [0, 1, 2, 3, 4, 5, 6, 7]
print(a[::]) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(a[::3]) # [0, 3, 6, 9] 👍
print(a[:0:-1]) # [9, 8, 7, 6, 5, 4, 3, 2, 1] 👍

마무리

생각해보니 [::z]의 경우 예전에 책에서 본 적 있는 것 같습니다. 워낙 안 쓰던거고 다양한 형태로 사용될 수 있다보니 낯설게 느껴진 것 같습니다. 이 글이 도움이 되었으면 좋겠습니다.

profile
몰입하고 성장하는 삶을 동경합니다

0개의 댓글