파이썬에서 슬라이싱(a[start:end]
)의 동작 방식은 범위를 지정할 때 다음과 같은 규칙을 따른다.
start
는 포함(포함되는 첫 번째 인덱스): 슬라이스의 시작 인덱스(start
)는 결과에 포함됩니다. 즉,start
인덱스의 요소부터 결과에 포함됩니다.end
는 제외(포함되지 않는 마지막 인덱스): 슬라이스의 끝 인덱스(end
)는 결과에 포함되지 않습니다. 즉,end
인덱스는 슬라이스 범위에서 제외됩니다.
이 방식은 반열린구간(half-open interval) 이라는 개념을 따릅니다. 수학적으로는 [start, end)
의 범위로 볼 수 있습니다.
왜 이렇게 설계되었는가?
이 설계는 다음과 같은 이유로 매우 편리합니다:
- 길이를 계산하기 쉬움: 슬라이스의 길이는
end - start
로 간단히 계산됩니다.
예:a[1:3]
에서 길이는3 - 1 = 2
입니다. 따라서 결과는 2개의 요소(4, 2)입니다. - 범위를 나누거나 연결하기 쉬움: 리스트를 나눌 때 겹치지 않도록 쉽게 구간을 나눌 수 있습니다.
end
를 제외하므로, 나눈 구간끼리 연결할 때 중복되지 않습니다. a = [3, 4, 2, 1] part1 = a[0:2] # [3, 4] part2 = a[2:4] # [2, 1] combined = part1 + part2 # [3, 4, 2, 1]
- 빈 슬라이스를 쉽게 표현:
start
와end
가 같으면 빈 슬라이스를 명확히 표현할 수 있습니다. a[2:2] # []
예제로 이해하기
리스트 a = [3, 4, 2, 1]
에서 a[1:3]
의 경우:
start = 1
: 인덱스 1의 값4
부터 포함됩니다.end = 3
: 인덱스 3의 값1
은 포함되지 않습니다.
결과적으로, 인덱스 1과 2의 요소인 [4, 2]
가 반환됩니다.
end
가 제외되는 이유로 인한 착각
end
가 제외되는 방식 때문에, 원하는 값을 포함시키려면 end
를 +1 해야 합니다. 이는 파이썬에서 슬라이스가 항상 "끝은 포함되지 않는다"는 규칙을 따르기 때문입니다.
추가적인 팁
만약 리스트 전체에서 특정 부분만 잘라내고 싶다면, 다음과 같이 사용 가능합니다:
a[:n]
: 처음부터 인덱스n-1
까지 포함 (n
은 제외)a[n:]
: 인덱스n
부터 끝까지 포함a[:]
: 리스트 전체를 복사
이처럼 반열린구간 방식은 많은 작업에서 편리함을 제공합니다.
원하는 곳에 데이터 집어 넣기
a
리스트에서 원하는 위치에 새로운 데이터를 추가하려면 insert()
메서드를 사용할 수 있습니다.
insert()
메서드
a.insert(index, value)
index
: 데이터를 삽입할 위치의 인덱스 (이 인덱스에 있는 기존 요소는 오른쪽으로 이동합니다).value
: 삽입하려는 값.
예제
리스트 a = [3, 4, 2, 1]
가 있고, 0
과 1
사이에 새로운 데이터를 추가하려고 한다면, 인덱스 1
이후에 추가하면 됩니다.
a = [3, 4, 2, 1]
# 0과 1 사이에 '5'를 추가
a.insert(1, 5)
print(a) # [3, 5, 4, 2, 1]
동작 방식
insert(1, 5)
는 인덱스1
에 값을 삽입합니다.- 기존 요소
4
는 한 칸 뒤로 밀립니다.
다른 예시
리스트의 맨 앞에 삽입
a = [3, 4, 2, 1]
a.insert(0, 99)
print(a) # [99, 3, 4, 2, 1]
리스트의 맨 끝에 삽입 (append와 동일한 효과)
a = [3, 4, 2, 1]
a.insert(len(a), 77)
print(a) # [3, 4, 2, 1, 77]
리스트 중간에 여러 번 삽입
a = [3, 4, 2, 1]
a.insert(2, 10) # [3, 4, 10, 2, 1]
a.insert(3, 20) # [3, 4, 10, 20, 2, 1]
print(a)
insert()
를 활용하면 원하는 위치에 데이터를 추가할 수 있습니다. append()
는 항상 맨 끝에 추가하는 데 사용됩니다.
'정보 > 기술' 카테고리의 다른 글
티스토리 폰트 변경하기; google font 적용 (1) | 2025.03.06 |
---|---|
[잡담] R 입문서 집필 하기 (2) | 2025.03.01 |
Homebrew 업데이트 방법 (0) | 2025.02.27 |
Homebrew를 사용하는 이유 (0) | 2025.02.26 |
파이썬 전체 라이브러리 업데이트 방법 (1) | 2024.12.17 |
댓글